O(N)中的哈密顿循环

时间:2013-06-04 14:05:26

标签: algorithm graph

我一直在训练codility.com问题。有一个问题是Eta 2011,它试图找到独特的哈密顿路径的数量。 您可以阅读整个问题here

总结。我们有一个图表,其中每个内部节点正好连接到3个其他节点,而外部节点连接到1个内部节点。我们画一条穿过所有外部节点的路径。现在所有节点(内部和外部)都连接到3个节点。这是一个无向图。

他想在O(N)中解决问题! 可用的解决方案解决了O(2 ^ N)或更高的问题。还有启发式解决方案,但显然它们并不精确。 利用图中每个节点与其他三个节点连接的知识,是否可以在O(N)中求解哈密顿路径?

由于版权我相信我无权复制/粘贴整个问题。但第一段提供了一个链接。

欢呼声 Moataz

4 个答案:

答案 0 :(得分:4)

来自wikipedia

  

......即使对于无向平面图,它们仍然是NP完全的   最大三度

因此,除非您有关于图形结构的更多信息,否则所有平面图3都是此问题的可能输入情况的子集,因此如果您可以多项式解决此问题 - 您也可以解决所有具有in-degree 3多项式的平面图的问题,你可以得出结论P=NP

答案 1 :(得分:2)

Hamiltonian cycle是某些图形子集的多项式,例如co-comparability graphs

如果您的输入图是其中一个图形,则可以在多项式时间内解决问题。请注意,我并未说明哈密顿循环不是NP-C。我只是说它是某些图的多项式。

因此,如果你的输入图是一个共同可比性图,那么你有一个多项式解。

答案 2 :(得分:2)

该图基本上是一棵树,其根节点有3个子节点,所有其他非叶子节点有2个子节点。树叶从左到右连接。

您可以将每个子树视为具有两个端点叶节点(例如,开始和结束)。

现在给出一个以节点n为根的子树。如果哈密顿路径不涉及n和它的父,那么它将涉及从开始到结束的路径并且将覆盖子树的所有顶点(实际上,在n中路由的子树中的hamiltion路由)。 p>

现在考虑树的根。假设我们将边缘带到x和y,x为左,y为右。

现在我们必须从x的根节点到子树的终点,以及y的子树的起始点。

(数字有帮助。)

路径的其余部分由连接开始到子树的末尾完成,这些子树需要自己的路径。

这给出了递归算法,并且可以在O(n)时间内计算。我相信。

疯狂期待30分钟。

答案 3 :(得分:0)

首先,考虑具有根的树和所有具有两个子节点的非叶节点。 叶子也从左到右连接,但第一片叶子连接 到最后。从最左边到最右边的叶子有多少条路径

答案是只有一个,并且不难证明。

现在从输入中获取树。选择任何节点并删除其中一个边。 你留下了两棵与我在开头提到的结构相同的树。 使用这两个,你可以建立一个汉密尔顿路径。

现在您选择的节点有三条边可以删除,因此有三种方式 总共做一条哈密顿路径:)。

因此代码归结为检查一致性并编写3以防万一。 30分钟真的不是那么疯狂。

相关问题