【发布时间】:2017-05-04 16:20:55
【问题描述】:
我目前正在为我的一项考试进行复习,并且遇到了这个问题, “一步一步地展示使用 Dijkstra 算法找到从顶点 A 到图中每个顶点的最短路径。在每一步都应该清楚地指出已知集和边界集。” 我了解如何找到最短路径,但我不确定边界集是什么? 谢谢!
【问题讨论】:
我目前正在为我的一项考试进行复习,并且遇到了这个问题, “一步一步地展示使用 Dijkstra 算法找到从顶点 A 到图中每个顶点的最短路径。在每一步都应该清楚地指出已知集和边界集。” 我了解如何找到最短路径,但我不确定边界集是什么? 谢谢!
【问题讨论】:
Dijkstra 算法的制定方法有很多种,但大多数版本背后的核心思想是将节点分成三组:
您已经知道从起点开始的最短路径的节点。这最初只是开始节点,并且随着算法运行时间越来越长而增长。
边界中的节点。这些是与第一组中的节点相邻的节点,您可以在其中猜测到节点的距离,但不一定能确定猜测是否正确。在算法的每一步中,您选择边界中成本最低的节点,并将其移动到您知道最短路径的节点组中。
未探索的节点。这些都是剩下的节点。
如果您使用优先级队列实现 Dijkstra 算法,则边界节点通常是优先级队列中的节点。如果您维护到节点的候选距离列表,而是在每个点选择最便宜的距离,则边界由候选距离不是无穷大的所有节点组成。
【讨论】: