【问题标题】:Design an algorithm for the single source shortest path problem that runs in time O(k(|V|+|E|))为单源最短路径问题设计一种算法,该算法在时间 O(k(|V|+|E|)) 中运行
【发布时间】:2019-03-12 10:18:26
【问题描述】:

假设给定一个有向图G = (V, E),它具有潜在的正边和负边​​长度,但没有负循环。让s ∈ V 成为给定的来源 顶点。如果从 s 到任何其他顶点的最短路径至多为k edges,如何设计一个及时运行的单源最短路径问题算法O(k(|V | + |E|))

【问题讨论】:

    标签: algorithm graph graph-algorithm directed-graph


    【解决方案1】:

    这里的 O(k(|V | + |E|)) 方法:

    1. 我们可以使用 Bellman-Ford 算法进行一些修改
    2. 创建数组 D[] 存储从节点 s 到某个节点 u 的最短路径
    3. 最初 D[s]=0,所有其他 D[i]=+oo(无穷大)
    4. 现在,在我们遍历所有边 k 次并放松它们之后,D[u] 在 之后保持从节点 s 到 u 的最短路径值
    5. 因为任何 s-u 最短路径最多有 k 条边,所以我们可以在边上 k 次迭代后结束算法

      伪代码:

      对于顶点中的每个顶点 v:
      D[v] := +oo

      D[s] = 0

      重复k次:
      对于边中权重为 w 的每个边 (u, v):
      如果 D[u] + w D[v] = D[u] + w

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-02
      • 2014-02-09
      • 1970-01-01
      • 2018-04-21
      相关资源
      最近更新 更多