【发布时间】:2011-12-06 21:50:09
【问题描述】:
我有一个项目,如果存在,我必须使用两种不同的算法在无向无权图中找到一条哈密顿路径。我已经使用回溯实现了一个启发式算法,但我一直在寻找另一个,但似乎找不到。
所以我的问题是,除了使用回溯之外,您还知道哪种算法可以找到哈密顿路径?
编辑:查看其他几篇帖子后,我发现我们可以通过使用最长路径算法找到一条哈密顿路径,并检查路径的长度是否等于顶点数 - 1。我想知道这是否是真是假。
提前致谢。
【问题讨论】:
标签: graph
我有一个项目,如果存在,我必须使用两种不同的算法在无向无权图中找到一条哈密顿路径。我已经使用回溯实现了一个启发式算法,但我一直在寻找另一个,但似乎找不到。
所以我的问题是,除了使用回溯之外,您还知道哪种算法可以找到哈密顿路径?
编辑:查看其他几篇帖子后,我发现我们可以通过使用最长路径算法找到一条哈密顿路径,并检查路径的长度是否等于顶点数 - 1。我想知道这是否是真是假。
提前致谢。
【问题讨论】:
标签: graph
由于汉密尔顿路径是 NP 完全的,因此您可能最终会遇到某种形式的回溯。是否使用堆栈或穷举枚举来实现指数级爆炸很大程度上取决于您。
如果您寻找公式,您可以查看各种 TSP 算法(我不太了解哈密顿路径技术)。考虑到任何利用三角不等式的方法都不适用,因为您的权重实际上都是 1 和无穷大(边不存在)。
寻找不需要三角不等式的 TSP 分支和切割公式。分支和切割似乎是 TSP 可证明最优解决方案的最先进技术。
使用最小生成树进行分支和绑定可能会很好(它很容易实现),并且您可以以迭代方式(在分支之间)使用节点权重来增加最小生成树,作为破坏度数节点的一种方式 > 2 到 2 度的节点,而不改变结果的正确性。我不记得技术名称(而且我在工作,所以我无法查找)。但是您对 MST 的新距离指标将是:
cost[i,j] = (exists(i,j) ? 1 : infinity) + node_augmentation[i] + node_augmentation[j]。
改变增广以实现良好收敛的规则稍微复杂一些(如果 degree[i] > 2 则增加,如果 degree[i]
抱歉,答案很糟糕,但我希望这对您寻找方法有所帮助。由于我真的不知道 TSP 技术在汉密尔顿路径技术上的应用效果如何,因此我可能无济于事。
【讨论】: