图形遍历任何源的最短路径

时间:2013-11-17 15:54:37

标签: algorithm graph

您获得了双向加权图。现在,您要遍历整个图形,从任何源开始,使总路径长度最小。 蛮力方法将遍历所有排列并给出最小值。

解决此类问题的正确方法应该是什么?

2 个答案:

答案 0 :(得分:1)

没有多项式时间算法来解决这个问题,因为旅行商可以减少它并且TSP没有多项式时间算法。但是你可以在这个问题中使用动态规划来改善强力​​。您可以像在TSP中一样应用DP,以将时间复杂度降低到O(2^N)

Held-Karp算法是一种算法,它使用动态编程来获得TSP的O(2 ^ N),并且可以在你的问题上稍作变化使用。

否则使用启发式算法找到好的解决方案: -

Genetic algorithm

Ant colony optimization

答案 1 :(得分:0)

这不完全是TSP。您正在有效地尝试求解最小长度哈密尔顿路径*,而没有指定的开始或结束节点。这个问题与TSP有关,与TSP一样,在一般情况下解决计算是不可行的。然而,有多项式时间算法可以产生良好的近似解(最差50%,比最佳,通常更接近)。还有一些运算速度更快但算法保证更少的算法 - 作为证明该点的粗略示例,您可以在O(n)中随机选择一个顶点序列以获得完整的图形。什么是“正确”取决于您希望在结果的最优性和算法的速度之间进行权衡。

本文:"Analysis of Christofides' heuristic: Some paths are more difficult than cycles"提供了一种算法,可以保证最差结果比最佳结果低50%。与您的案例相匹配的变体在本文中称为P *。请注意,与TSP一样,此算法假设一个完整的图形(所有顶点都连接在一起)。鉴于您允许顶点重新访问,即使所有顶点未直接连接,您的图形也会隐式完成。基本上你是原始图形中的compute the shortest path between each pair of vertices,然后用计算出的成本创建缺失边(并记住它们之间的顶点之间的实际路径)。您还需要替换已找到更便宜的间接路径的任何现有直接边(如果有)。最后一部分对于确保满足三角不等式是必要的,这需要具有算法所需的度量TSP。一旦计算出结果,如果它使用了你的任何合成边,你就会存储它们采用的实际路径,这样你就可以建立完整的路径。

  • =使用哈密尔顿路径,不会重新访问顶点。这里的解决方案也不会重新访问顶点(除非通过合成边缘),因为如果满足三角形不等式,那么总是比直接到目标节点更昂贵。当我们扩展汉密尔顿路径以解包合成边缘时,我们将重新进行,这个结果路径将不再是哈密尔顿路径。