【问题标题】:Sort nodes that know their neighbours, but not which side they're on对知道邻居但不知道他们在哪一边的节点进行排序
【发布时间】:2014-06-11 05:03:32
【问题描述】:

取 N 个节点(其中 N >= 3)排成一条直线。每个节点都知道自己的唯一标识符和离它最近的两个节点的标识符,但不知道最近的两个节点在哪一边。

如果给定一个代表节点的对象集合,我如何对它们进行排序以使它们按正确的顺序排列?

例如,如果我们有四个节点排列为 1,2,3,4,它们可以由四个具有属性 (1,2,3) (2,1,3) (3,2,4) & (4,2,3) 其中三元组是 (node, neighbour1, neighbour2)。

我将在这里稍微解释一下,但重要的是节点不知道哪个邻居是哪个。例如,节点 3 知道节点 2 和 4 是它最近的邻居,但不知道每个节点在哪一侧。因此,上面显示的四个对象等价于 (1,3,2) (2,3,1) (3,4,2) & (4,3,2) 以及任何其他有效排列。

行尾的节点显然是有问题的,因为它们最近的两个邻居都是同一侧 - 尽管节点本身没有意识到这一点。

因此,给定代表节点的 N 个随机排序的对象,我正在使用一种算法对对象进行排序,使它们处于正确的顺序:即从左到右或从右到左等同于节点未知。

欢迎提出任何建议。谢谢!

顺便说一句 - 如果这是一个“众所周知的”数据结构/算法问题,我会 (a) 因为无法在线找到它而自责,并且 (b) 很高兴有(大概) 和同样众所周知的解决方案。

【问题讨论】:

    标签: algorithm sorting


    【解决方案1】:

    您可以从识别两个端点对开始。您可以通过识别具有相同元素的点对来做到这一点。

    对于 N > 4

    例如 (1,2,3) 和 (2,1,3) 是在同一端的相邻点,因为它们具有相同的元素。现在哪一个是终点,哪一个是邻居?

    为此,您可以注意到端点(此处为 1)不应作为任何其他节点的邻居存在,而另一个节点(此处为 2)将作为另一个节点(此处为 3)的邻居存在如果 N > 4。事实上,其他节点应该在这个节点旁边。

    然后您可以进行相应的操作。

    如果 N == 3,那么你可以按任意顺序对元素进行排序,实际上有 6 种可能,因为所有元素都是彼此的邻居。

    对于 N == 4,一旦确定了端点对,您的问题就会得到解决。

    运算复杂度:O(N^2)

    【讨论】:

    • 找到端点当然是一个好的开始,尽管在 N = 4 示例中,端点的节点是 (1,2,3) 和 (4,2,3) [或 (1 ,3,2) 和或 (4,3,2)]。对终结性的测试变成了所讨论的节点必须是彼此的邻居。感谢您的提示,非常感谢。
    • @Attrisoft 您必须将 (1,2,3), (1,32) 识别为朝向一端的一对点(都具有相同的元素)和 (4,2,3) ,(3,2,4) 作为线另一端的另一对点。
    • 别担心,我明白了。工作一种享受。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-09
    • 1970-01-01
    • 1970-01-01
    • 2015-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多