我们知道bellman-ford算法检查每个步骤中的所有边缘,如果是,则检查每个边缘
d(v)的> d(U)+ W(U,V)
然后d(v)被更新,使得w(u,v)是边(u,v)的权重,d(u)是顶点u
的最佳寻找路径的长度。如果在一步中我们没有顶点更新,则算法终止。假设这个算法,用于在s
迭代完成后找到图G中具有n
顶点的顶点k<n
的所有最短路径,以下哪项是正确的?
1)来自
s
的所有最短路径中的边数最多为k-1
2)来自
s
的所有最短路径的权重最多为k-1
3)图表没有负循环。
我确定其中一个是真的,但我的TA说其中两个是正确的。对这些问题的任何想法或暗示?
答案 0 :(得分:1)
让我们一次查看一个语句:
1)来自
s
的所有最短路径中的边数最多为k-1
考虑以下图表:
s ---e1---> n1 ---e2---> n2 ---e3---> n3
如果边缘按给定的顺序排序(e1, e2, e3
),那么在第一次迭代后,每个节点都会有正确的距离(检查e1
更新n1
,然后检查{{ 1}}更新e2
等等。所以在这种情况下,算法在n2
次迭代后停止,因为第二次迭代不会改变任何东西。最长最短路径中的边数为k=2
且3
不成立。因此,这种说法是错误的。但是,如果同时评估所有边,则该语句是正确的(每次迭代只能比前一次迭代更远一个边缘)。
2)来自
3 <= 2-1
的所有最短路径的权重最多为s
边缘数量及其总重量均不受k-1
的限制。请考虑上例中的所有边都有权重1000.显然没有k-1
的连接。
3)图表没有负循环。
如果您按照所做的那样定义算法(在没有进行任何更改时终止),那么这是正确的。任何负循环都会导致无限循环,因为此循环中顶点的距离会相继减小。