考虑该图对于应用Dijkstra算法是有效的,即没有负边缘权重。我很难说服自己Dijkstra的算法只有在选择每一轮中的最小距离节点被提取时才有效。什么构成提取除最小距离节点以外的任何东西的证据都会导致Dijkstra算法的失败? 我正在寻找一个好的论点,但欢迎支持的例子。
答案 0 :(得分:5)
如果提取非最小节点,那么您将提取一个节点,在提取时未知最短距离。它将在稍后计算,但不再提取节点,因此最后将留下至少一个错误的最小距离。
示例:
您将拥有d[1] = 0
,然后您将提取此内容,因为它是唯一要提取的内容。
这将设置:
d[3] = 3
d[2] = 1
现在你应该提取2
,但是假设你提取3
。
您将设置d[4] = 4
。
现在假设你提取2
并设置d[3] = 2
。
接下来,仅提取4
。你提取它就完成了。
您的错误值为d[4] = 4
而不是d[4] = 3
。
请注意,这假设您无法多次提取节点(在经典的Dijkstra算法中无法提取)。如果你允许这样做,那么你的建议确实有用,但可能效率不高,也不再是Dijkstra。