Bellman Ford和One Olympiad有问题吗?

时间:2015-04-08 16:42:21

标签: algorithm data-structures graph graph-theory shortest-path

我三天前参加了奥林匹克考试。我遇到了一个很好的问题如下。

我们知道bellman-ford算法检查每个步骤中的所有边缘,如果是,则检查每个边缘

d(v)的> d(U)+ W(U,V)

然后更新d(v)w(u,v)是边(u, v)的权重,d(u)是顶点u的最佳查找路径的长度。如果在一步中我们有no update for vertexes,那么算法terminate。假设这个算法,用于在s迭代完成后找到图G中具有n顶点的顶点k < n的所有最短路径,以下哪项是正确的?

  

1)来自s的所有最短路径中的边数最多为k-1

     

2)来自s的所有最短路径的权重最多为k-1

     

3)图表没有负循环。

谁可以讨论这些选项?

2 个答案:

答案 0 :(得分:8)

1是不正确的,因为如果我们碰巧以最短路径树的拓扑顺序放松弧,那么我们会在一次迭代中收敛,尽管最短路径树可能是任意深度的。

s --> t --> u --> v

Relax s->t, t->u, u->v; shortest path from s->v is three hops,
but B--F has made two iterations.

如果我们同时进行放松(即,总是使用圆r中圆r-1的值,即使圆r已更新它们),那么1实际上是正确的,通过归纳(最短路径树的深度)从零开始,每轮最多只增加一次,而不是最后一轮。

2是不正确的,因为谁知道权重是多少?

  100
s --> t

Relax s->t; weight is 100, but B--F has made two iterations.

3是正确的,因为通过平均参数,至少一个负循环的弧将被放松。让v1, ..., vn成为一个循环。由于弧线是放松的,我们有d(vi) + len(vi->vi+1) - d(vi+1) >= 0。求和所有i的不等式,并将d项缩小为sum_i len(vi->vi+1) >= 0,这表示该循环是非负的。

答案 1 :(得分:0)

我认为选项3是不正确的,因为要知道是否存在负权重周期,Bellman ford算法需要运行n次。 首先计算最短路径n-1次,然后再一次检查距离是否有任何改善,如果有改进,则表示负重周期为负。