【问题标题】:A slightly faster Bellman-Ford稍快的贝尔曼福特
【发布时间】:2012-05-24 23:17:07
【问题描述】:

我对 Bellman-Ford 做了轻微的修改,使它只做“有用的”放松。也就是说,意味着 d(v) 的松弛已更新。

define Relax(u, v):
 if d(v) > d(u) + w(u,v)         //w(u,v) = weight of edge u->v
    d(v) = d(u) + w(u,v)


INIT // our usual initialization.
Queue Q
Q ← s // Q holds vertices whose d(v) values have been updated recently.
While (Q not empty)
{
  u ← Frontof(Q);
  for each neighbor v of u
  {
    Relax(u, v)

    if d(v) was updated by Relax and v not in the Q  //Here's where we're a bit smarter
        ADD v to End of Q.                           //since we add to Q if 
                                                     //the relaxation changed d(v)
  }
}

现在,如果所有最短路径最多有 k 个弧。那么最坏情况的运行时间是 O(V*k),因为在这个智能版本中我们只经过 k 个弧。这比原来的 O(V*E) 快一点,因为 |k|

谁能告诉我这种改进版本不比原来的 Bellman-Ford 算法更好的图形类型吗?也就是说,最佳情况下的性能是 O(V*E)

【问题讨论】:

    标签: graph shortest-path bellman-ford


    【解决方案1】:

    考虑所有边都具有负权重的图。在这个图中,如果顶点 u 有多个传入边,它将被多次添加到 Q 中。

    语句|k|

    【讨论】:

      猜你喜欢
      • 2018-05-16
      • 2021-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-17
      • 2011-07-16
      • 1970-01-01
      相关资源
      最近更新 更多