Python或C:将对列表转换为连接列表

时间:2013-03-11 02:27:31

标签: algorithm

C或python中有效的算法是什么,给定一个表示两个数字之间关系的无序对列表,它们将组合这些对,以便它们形成一个连续的列表。

例如,给出以下内容:

(0, 1)
(1, 2)
(3, 2)
(4, 3)

产生以下内容:[0, 1, 2, 3, 4]

显然,如果对中存在间隙或循环,例如(0, 1) (3, 4),并且在这些情况下抛出错误消息或类似的东西,这将不起作用。

2 个答案:

答案 0 :(得分:1)

可以将数字建模为图形中的顶点。然后,列表中的每个元素将表示节点之间的边缘。

您正在寻找的是此图的“欧拉路径”。有多种算法可供选择。在http://en.wikipedia.org/wiki/Eulerian_path

查看众所周知的算法

答案 1 :(得分:0)

你要做的不是欧拉路径(访问每个边缘一次)而是Hamiltonian path(访问每个顶点一次),因为你不希望在你的路径中有一个循环由定义循环意味着你不想两次访问任何顶点。

众所周知,这个问题是NP-complete,这意味着没有已知的有效算法(如果在polynomial time中表示“有效”)。

如果你能为这个问题找到一个有效的算法,你也可以通过显示P和NP相等来解决P vs NP problem。大多数计算机科学家认为P对NP问题的答案是“不,NP问题的有效算法是不可能的”,这意味着你的问题不可能有效的算法(尽管还有待证明)。 / p>