贝尔曼福特和一个奥林匹克问题?

Posted

技术标签:

【中文标题】贝尔曼福特和一个奥林匹克问题?【英文标题】:Bellman Ford and One Olympiad Questions? 【发布时间】:2015-04-08 16:42:20 【问题描述】:

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

我们知道 bellman-ford 算法在每一步中检查所有边,并且对于每条边如果,

d(v)>d(u)+w(u,v)

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

    s 开始的所有最短路径中的边数最多为k-1
    来自s的所有最短路径的权重最多为k-1
    图表没有负循环。

谁能讨论这些选项?

【问题讨论】:

【参考方案1】:

1 不正确。首先,如果有的话,我们总是会找到具有 k 条边的最短路径。而且,如果我们碰巧按照最短路径树的拓扑顺序松弛弧,那么我们会在一次迭代中收敛,尽管最短路径树可能是任意深度的。

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.

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)部分确实如此。这个想法是,在 k 个步骤中,算法只考虑长度为 k 的路径。事实上,你可以通过对 k 的归纳来证明,在 k 步之后实现 d(v) 值的路径最多有 k 条边长。 但是,如果同时评估所有边?第一个又错了?棘手的问题... @MK 这里有两个不同的问题。 p。 295,贝尔曼的未优化版本——福特是我所指的“同时放松”版本。提前终止是一种不同的优化——因为每一轮贝尔曼——福特都做同样的操作,如果我们对整轮不做任何改变(对于同步或非同步版本,没关系),那么显然所有后续回合也不会改变,所以我们可以停下来。 @MK 是的,更准确地说,贝尔曼找到的每条最短路径——福特的长度最多为 k,其中 k 是完成的回合数。【参考方案2】:

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

【讨论】:

以上是关于贝尔曼福特和一个奥林匹克问题?的主要内容,如果未能解决你的问题,请参考以下文章

数学奥林匹克问题解答:初等数论-2

2012第十八届全国青少年信息学奥林匹克联赛(NOIP2012)初赛提高组答案

第11届全国少年信息学奥林匹克联赛初赛试题

参加全国青少年信息学奥林匹克竞赛需要具备哪些方面的知识?

数学奥林匹克问题解答: 新西兰数学奥林匹克第二题解答

数学奥林匹克问题解答: 新西兰数学奥林匹克第一题解答