我正在尝试使用map reduce来实现dijkstra的最短路径算法。
我有两个问题:
如果未选择路径的距离变小,此算法是否会重新评估距离。例如 - &gt; 1-> 2-> 5和2-> 3-> 2认为这些值是权重,并且可能选择到目的地路径1的2条路径为1 <2但是路径的总权重较小2是2-> 3-> 2所以想知道dijkstra算法是否负责回溯。
请简要介绍一下map和reduce功能在这种情况下的作用。我正在考虑在map函数中发出和在reduce函数和reduce函数中迭代相关权重以找到最小加权邻居..但之后它是如何运作的。请让我对集群中从头开始发生的情况以及内部发生的情况有所了解。
答案 0 :(得分:1)
Dijkstra不执行回溯来重新评估距离。
http://upload.wikimedia.org/wikipedia/commons/5/57/Dijkstra_Animation.gif
gif应该可以帮助您了解Dijkstra算法如何重新评估距离。它通过在节点n内存储“节点n的最短路径”来避免回溯任务。
在遍历期间,如果算法再次遇到节点n,它将简单地比较它经过的当前“距离”到达节点n并将其与存储在节点n中的数据进行比较。如果它更大则忽略它,如果它更小则它会一直替换节点n中的数据。
然而,在处理负边缘时,Dijkstra有一个限制,因为在某些情况下你最终可能会出现负循环,所以这是你应该警惕的。