【问题标题】:algorithm for single source shortest path problem单源最短路径问题的算法
【发布时间】:2022-01-17 01:47:19
【问题描述】:

给定一个有向图 G = (V, E),具有正边和负边​​权重,但没有循环。让 s ∈ V 是给定的源顶点。如何找到一种算法来找到所有顶点到 s 的距离,它的运行速度可能比 Bellman Ford 的 O(VE) 时间复杂度要快。

【问题讨论】:

    标签: algorithm graph bellman-ford


    【解决方案1】:

    如果图没有环,那么你可以按拓扑顺序处理顶点。

    对于每个顶点v,如果它可以从距离ds到达,那么对于每个边(v,u ) 权重 w,将 u 标记为可达权重 d+w。如果 u 已经可以以较低的权重到达,则不要理会它。

    因为你按照拓扑顺序处理图,你知道当你处理一个顶点v时,你已经处理了它的所有前辈,所以你会知道它的最短路径的长度从 s。第一个可达的顶点当然是s

    很容易将它与Kahn's algorithm 结合起来进行拓扑排序,在从 s 可到达的顶点子图上。

    1. 首先进行 BFS 搜索以找到从 s 可到达的所有顶点,并同时计算该子集中每个顶点的传入边。
    2. s 将是计数为“0”的唯一顶点。它与 s 的距离也已知为 0。放入队列中。
    3. 虽然队列中有顶点:
      1. 从队列中移除一个顶点v
      2. 调整与邻居的距离
      3. 减少其邻居的传入边数。如果任何邻居的计数为 0,则将其放入队列中。

    完成后,所有可到达的顶点都将被处理,并且它们的所有距离都是已知的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多