最佳地划分哈密顿循环

时间:2014-11-16 21:21:06

标签: algorithm graph-theory

我的朋友把这个作为一个脑筋急转弯告诉了我,但是如果没有蛮力的话,我怎么处理这个问题。

我们假设我们在经过m个其他顶点v1到vm之后给出了一个哈密顿循环,它在p0开始和结束。但是现在我们想把这个循环分成两个很大程度上不相交的循环。两个循环在p0处开始和结束,但是v1到vm在两个循环之间被分区,以便最小化总共行进的距离。唯一的条件是,如果我< j,然后vi< vj必须在任何给定的循环中保持为真。任意两个顶点之间的距离函数是任意的,距离(i,j)=距离(j,i)。

我知道如果我们检查两个周期中所有可能的顶点分区,这是可能的。但这似乎很慢。

1 个答案:

答案 0 :(得分:1)

您可以在O(m^2)时间使用动态编程解决此问题(也许您更快?我没有尝试改进它)。我们的想法是,对于每个ij i < j,您计算构建W[i][j]的一条路径的最佳方式v[i]以及另一条v[j]的不相交路径{1}},其中两条路径用完了从v[1]v[j]的所有顶点。通过查看以v[j]结尾的路径中倒数第二个顶点的可能性,可以有效地计算这些。

最后,您会考虑每个W[i][m] i,并通过返回p[0]来关闭两条路径,从而看到您获得的结果。然后你选择最好的一个。