Algorithm 迪克斯特拉';带拓扑排序的s算法

Algorithm 迪克斯特拉';带拓扑排序的s算法,algorithm,dijkstra,shortest-path,topological-sort,Algorithm,Dijkstra,Shortest Path,Topological Sort,我在一本教科书中看到了这段话: 如果图是非循环的,我们可以改进Dijkstra的算法。可以按拓扑顺序选择顶点,因为当选择顶点时,其距离不能再降低,因为没有来自未知节点的传入边 我了解拓扑排序和Dijkstra算法,但不了解拓扑顺序如何帮助加快Dijkstra算法的速度,尤其是当顺序并不总是唯一的时候。(除非它指的是空间复杂性,这也没有意义) 有人能解释一下它是如何改进的并举个例子吗 您可以选择任意拓扑排序并按此顺序处理顶点 时间复杂度在图的大小上是线性的,因为不再需要优先级队列。您可以按拓扑顺序

我在一本教科书中看到了这段话:

如果图是非循环的,我们可以改进Dijkstra的算法。可以按拓扑顺序选择顶点,因为当选择顶点时,其距离不能再降低,因为没有来自未知节点的传入边

我了解拓扑排序和Dijkstra算法,但不了解拓扑顺序如何帮助加快Dijkstra算法的速度,尤其是当顺序并不总是唯一的时候。(除非它指的是空间复杂性,这也没有意义)


有人能解释一下它是如何改进的并举个例子吗

您可以选择任意拓扑排序并按此顺序处理顶点

时间复杂度在图的大小上是线性的,因为不再需要优先级队列。您可以按拓扑顺序迭代所有顶点并计算它们的距离

事情是这样的:

dist = 0 for the start vertex and +inf for the rest
for v in topological order:
     for u in neighbors[v] in reverse graph:
        dist[v] = min(dist[v], dist[u] + weight(u, v))    

正确性源于这样一个事实,即当我们到达
v
时,我们已经处理了所有具有
v
边的顶点(根据拓扑顺序的定义)。

您可以选择任意拓扑排序并按此顺序处理顶点

时间复杂度在图的大小上是线性的,因为不再需要优先级队列。您可以按拓扑顺序迭代所有顶点并计算它们的距离

事情是这样的:

dist = 0 for the start vertex and +inf for the rest
for v in topological order:
     for u in neighbors[v] in reverse graph:
        dist[v] = min(dist[v], dist[u] + weight(u, v))    
正确性来源于这样一个事实:当我们到达
v
时,我们已经处理了所有具有
v
边的顶点(根据拓扑顺序的定义)