【发布时间】:2022-01-17 01:47:19
【问题描述】:
给定一个有向图 G = (V, E),具有正边和负边权重,但没有循环。让 s ∈ V 是给定的源顶点。如何找到一种算法来找到所有顶点到 s 的距离,它的运行速度可能比 Bellman Ford 的 O(VE) 时间复杂度要快。
【问题讨论】:
标签: algorithm graph bellman-ford
给定一个有向图 G = (V, E),具有正边和负边权重,但没有循环。让 s ∈ V 是给定的源顶点。如何找到一种算法来找到所有顶点到 s 的距离,它的运行速度可能比 Bellman Ford 的 O(VE) 时间复杂度要快。
【问题讨论】:
标签: algorithm graph bellman-ford
如果图没有环,那么你可以按拓扑顺序处理顶点。
对于每个顶点v,如果它可以从距离d的s到达,那么对于每个边(v,u ) 权重 w,将 u 标记为可达权重 d+w。如果 u 已经可以以较低的权重到达,则不要理会它。
因为你按照拓扑顺序处理图,你知道当你处理一个顶点v时,你已经处理了它的所有前辈,所以你会知道它的最短路径的长度从 s。第一个可达的顶点当然是s。
很容易将它与Kahn's algorithm 结合起来进行拓扑排序,在从 s 可到达的顶点子图上。
完成后,所有可到达的顶点都将被处理,并且它们的所有距离都是已知的。
【讨论】: