我该如何表示这些相对较高/较短的比较?

时间:2013-05-29 04:18:52

标签: php regex arrays data-representation

说我正在解析一句话:“Blake比Mary高,Mary比Sue高,Sam比Mary短,而John比Mary高”

看起来像是:

Sue, Sam
Mary
John, Blake

也许:

Array(
    [0] => Array(
        [0] => Sue
        [1] => Sam
    )

    [1] => Mary
    [2] => Array(
        [0] => John
        [1] => Blake
    )
)

我们不知道Sue和Sam中的哪一个更短/更高,我们不知道John和Blake中哪一个更短/更高,所以他们坐在同一条线上。

但后来我可以给它声明:“布莱克比约翰短”,这会使它看起来像:

Sue, Sam
Mary
Blake
John

思考?我知道如果我只是试着跳进去,我会弄得一团糟,所以我只是想知道代表它的最佳方式。像上面的数组或树数组?

我想稍后给它一个问题,比如“谁更矮,布莱克还是苏?”答案是苏。

1 个答案:

答案 0 :(得分:3)

可以用directed graph表示。如果您有关于两个人身高的相关信息,请在他们之间添加一条边,使其指向较高或较矮的人。 (只要你是一致的,这无关紧要。)要看一个人是否比另一个更短或更高,看看他们是否是另一个的祖先或后代。如果形成一个循环,则意味着信息不一致。

在PHP中,你可能有一个Person类。每个Person都会有一个Person的数组,它们比它们更高(更短)。然后,您将拥有一组Person个对象。要创建链接,您需要将最高(最短)的人添加到最短(最高)的人更高(更短)的数组中。

为了测试A人是否比B人更矮(更高),从A人开始并通过所有直接和传递更高(更短)的人进行递归。如果你到达人B,人A比人B更短(更高)。尝试交换人A和B,看看是否产生结果。如果仍然没有确定的结果,则没有足够的信息来确定A和B人的相对高度。

如果信息不一致,则按上述方式递归将导致无限递归。

相关问题