【问题标题】:dijkstra's shortest path algorithm backtracks?dijkstra的最短路径算法回溯?
【发布时间】:2013-12-08 10:41:57
【问题描述】:

我正在尝试使用 map reduce 实现 dijkstra 的最短路径算法。

我有两个问题:

  1. 如果未选择路径的距离变小,此算法是否会回溯以重新评估距离。例如-> 1->2->5 和 2->3->2 将这些值视为权重,到目标路径 1 的可能 2 条路径将被选择为 13->2 所以想知道 dijkstra 的算法是否负责回溯。

  2. 请简要介绍一下在这种情况下 map 和 reduce 函数的作用。我正在考虑在map函数和reduce函数中发出,在reduce函数中我迭代相关的权重以找到权重最小的邻居..但在那之后它是如何工作的。请告诉我它是如何在集群中从头开始发生的以及内部发生的情况。

【问题讨论】:

标签: hadoop mapreduce dijkstra


【解决方案1】:

Dijkstra 不会执行回溯来重新评估距离。

http://upload.wikimedia.org/wikipedia/commons/5/57/Dijkstra_Animation.gif

该 gif 应该可以帮助您了解 Dijkstra 的算法如何重新评估距离。它通过在节点 n 中存储“到节点 n 的最短路径”来避免回溯任务。

在遍历过程中,如果算法再次遇到节点 n,它将简单地比较它遍历到节点 n 的当前“距离”,并将其与存储在节点 n 中的数据进行比较。如果较大则忽略它,如果较小则继续替换节点 n 中的数据。

但是,Dijkstra 在处理负边缘时有一个限制,因为在某些情况下您可能会出现负循环,因此您应该警惕这一点。

【讨论】:

  • 谢谢,现在我明白为什么不需要回溯了..但是你如何得到最终的最短路径?一旦所有点都标有最短距离,我们如何在您给出的示例中最终路径应该是 1->3->6->5 ?请让我知道地图减少我的问题的一部分..我的意思是映射器和reducer会做什么..它是如何在内部发生的?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-30
  • 2021-04-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多