繁体   English   中英

设计一个在时间O(k(| V | + | E |))运行的单源最短路径问题的算法

[英]Design an algorithm for the single source shortest path problem that runs in time O(k(|V|+|E|))

假设我们给出了有向图G = (V, E)具有潜在的正和负边长,但没有负循环。 s ∈ V是给定的源顶点。 如果从s到任何其他顶点的最短路径最多需要k edges如何设计一个在时间O(k(|V | + |E|))中运行的单源最短路径问题的算法?

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

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

    伪代码:

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

    D [s] = 0

    重复k次:
    对于边缘重量为w的每条边(u,v):
    如果D [u] + w <D [v]:
    D [v] = D [u] + w

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM