Dijkstra的算法可以执行m次放松

时间:2012-10-21 20:15:12

标签: algorithm graph-algorithm dijkstra

在Dijkstra的算法中,放松最多被称为 m次(其中m = #edges)。我试图弄清楚一些具体的图形示例,哪个放松确实执行了m次。我知道每次找到更便宜的指向节点的路径时都会发生松弛,但我无法真正“想象”这种情况。

1 个答案:

答案 0 :(得分:1)

如评论中所述,树就是一个例子。循环的示例是n个顶点(其中n为奇数)的图形,其具有以下边缘:

(1,2)成本1

(2,3)成本1

(1,3)成本10

(3,4)成本1

(4,5)成本1

(3,5)成本10

...

(n - 2,n - 1)成本1

(n - 1,n)成本1

(n - 2,n)成本10

来自顶点1的Dijkstra算法将始终放松昂贵的1-> 3,3-> 5,5-> 7,7-> 9,...(n-2) - > n边缘首先,然后会找到更长但更便宜的路径。

给定的图表是Dijkstra算法中为什么需要优先级队列的一个很好的例子。在随机图上,使用一个简单的队列并在每次边缘松弛之后将顶点向后推,往往工作得非常快,但这种算法在这种情况下会以指数时间运行。