求图中哈密顿步行的多项式时间算法

时间:2008-09-18 00:13:30

标签: algorithm np-complete

是否存在用于在图中找到哈密顿步行的多项式时间算法?

我的算法是N阶乘,非常慢。

7 个答案:

答案 0 :(得分:21)

一般来说,由于汉密尔顿路径问题的(决策版本)是NP完全的,你不可能希望得到一个多项式时间算法来找到哈密顿路径。您可以使用通常的N来略微提速! →N 2 2 N 动态编程技巧(计算hp [v] [w] [S] =“是否存在具有端点v和w且其顶点为每个子集S的子集S“和使用DP的每两个顶点v和w),但这仍然是指数的。

然而,有许多特殊类型的图表,哈密尔顿路径将始终存在,并且可以很容易地找到它们(参见Posa,Dirac,Ore等的工作)

例如,以下情况属实:如果图的每个顶点的度数至少为n / 2 ,则图形具有哈密顿路径。事实上你可以在O(n 2 )中找到一个,或者如果你更巧妙地在IIRC中找到O(n log n)。
[粗略草图:首先,只是在一些“哈密顿量”循环中连接所有顶点,如果边缘实际上在图中,则不要注意。现在对于周期中实际上不在图中的每个边缘(v,w),考虑周期的其余部分:v ... w。当deg(v)+ deg(w)> = n时,列表中存在连续的x,y(按此顺序),使得w是x的邻居,v是y的邻居。 [证明:考虑{w的所有邻居的集合}和{v邻居列表中所有后继者的集合};它们必须交叉。]现在将你的周期[v ... xy ... wv]更改为[vy ... wx ... v]而不是它至少有一个无效边缘,所以你最多需要n次迭代以获得真正的哈密顿循环。更多细节here。]

顺便说一下:如果你要找的只是一次包含每个边缘的步行,那么它被称为欧拉步行和带有它的图形(奇数度的顶点数是0或2) ),在多项式时间(快速)中很容易找到。

答案 1 :(得分:17)

您刚问million dollar question。找到汉密尔顿路径是NP完全问题。使用动态编程可以在多项式时间内解决一些NP难问题,但(据我所知)这不是其中之一。

答案 2 :(得分:3)

这是NP完成。但如果你确实找到了一个好的方法,请告诉我,我会告诉你如何致富。

答案 3 :(得分:2)

找到一个更好的最短算法是不可能的,因为它很难。但是你可以尝试一些启发式方法,也许你可能想咨询一下你的讲义;)。

为了降低复杂性,您可以使用贪婪算法找到一个简短的(ish)步行。

答案 4 :(得分:1)

根据您正在使用的图形是如何生成的,您可以通过执行贪婪的路径扩展来获得对随机实例的预期多项式时间,然后在卡住时进行随机边缘交换。

这适用于随机生成的相对稀疏的图形,保证有哈密顿散步。

答案 5 :(得分:1)

嗯..这取决于你的定义是什么。哈密​​顿路径肯定是NP完全的。然而,可以在O(p ^ 2logp)或O(max(c ^ 2plogp)中计算哈密顿步行,它可以多次访问边和顶点(是的,它仍然称为哈密尔顿,只要你在末尾添加步行位)。 ,| E |))只要您的图表满足Dirac首先推测的某个条件并且Takamizawa证明了。参见Takamizawa(1980)“用于在图中找到短的封闭跨越步行的算法”。

答案 6 :(得分:1)

我的查询:显示用于在图G中查找哈密顿循环的搜索问题RHAM 自还原 如果搜索问题R可以通过库克可简化为决策问题,则可以自我简化 SR={ x : R(x) ≠ ∅ }