Algorithm O(N)中的哈密顿圈

Algorithm O(N)中的哈密顿圈,algorithm,graph,Algorithm,Graph,我一直在接受Codibility.com问题的培训。有一个问题,它试图找到唯一哈密顿路径的数目。 你可以读懂整个问题 总之。我们有一个图,其中每个内部节点恰好连接到3个其他节点,而外部节点连接到1个内部节点。我们画了一条穿过所有外部节点的路径。现在所有节点(内部和外部)都连接到3个节点。这是一个无向图 他想解决O(N)中的问题!!! 可用的解决方案以O(2^N)或更高的速度解决问题。也有启发式解决方案,但显然它们并不精确。 利用图中每个节点恰好与其他三个节点相连的知识,可以求解O(N)中的哈密顿

我一直在接受Codibility.com问题的培训。有一个问题,它试图找到唯一哈密顿路径的数目。 你可以读懂整个问题

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

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

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

干杯 莫阿塔兹

来自:

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


因此,除非你有更多关于图结构的信息,否则所有3度平面图都是这个问题可能输入情况的子集,因此如果你能多项式地解决这个问题-你也能多项式地解决所有3度平面图的问题,你可以得出结论,对于某些图的子集,哈密顿圈是多项式的,例如

如果您的输入图是此类图之一,则可以在多项式时间内解决该问题。注意,我并不是说哈密顿循环不是NP-C。我想说的是,对于某些图,它是多项式


因此,如果您的输入图是一个可比较图,那么您就有了一个多项式解。

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

您可以认为每个子树都有两个端点叶节点(比如开始和结束)

现在给定一个根在节点n的子树。如果哈密顿路径不涉及n及其父路径,则它将涉及从起点到终点的路径,并将覆盖子树的所有顶点(实际上,子树中的哈密顿路径路由为n)

现在考虑树的根。假设我们取x和y的边,x在左边,y在右边

现在我们必须从根到x的子树终点,从y的子树起点

(一个数字有帮助)

路径的其余部分由需要到自身的路径的子树的起点到终点连接完成

这给出了一个递归算法,我相信可以在O(n)时间内计算出来


< 30分钟的疯狂期待。

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

答案是只有一个,这不难证明

现在从输入中获取树。拾取任意节点并删除其一条边。 剩下的两棵树的结构与我在开头提到的相同。 使用这两个函数,您可以精确地构建一条哈密顿路径

现在,您拾取的节点有三条边可以删除,因此有三种方法可以删除 总共制作一个哈密顿路径:)

因此,代码归结为检查一致性,并在一切正常的情况下编写3。
30分钟并不是那么疯狂。

From:
即使对于最大三度的无向平面图,它们仍然是NP完全的。
你可以发布这个问题,因为它有更多的信息。实际问题比你描述的要约束得多。@ZiyaoWei这个问题是版权所有的,理论上我不能复制它的范围它可以返回的值非常有限,并且比计算哈密顿路径要简单得多。我验证了这一点-提交了一个100分制的解决方案。我对问题进行了一点更新。另外,请阅读这里的描述:给出的图的结构比具有3级节点的任意图要特殊得多。@amit:是的,但他基本上已经得到了解决方案。有趣。我必须先读这篇文章,然后我来找你。谢谢我在画这棵树时遇到困难,这是什么意思-
“第一个节点没有连接到最后一个”
?你说得对,我指的是第一片叶子,谢谢。通过删除原始树中的一条边,可以得到两棵这样的树(因为可以删除圆的两条边,因为它们必须被使用)。我把这个问题交给了一个朋友,她通过使用增量构造(从一个内部节点开始,然后从那里开始构建)证明了这一点,这更为优雅。