【问题标题】:Bellman-Ford and some facts about Graph G?Bellman-Ford 和关于 Graph G 的一些事实?
【发布时间】:2015-06-01 15:14:23
【问题描述】:

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

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

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

1) 从s 开始的所有最短路径中的边数最多为k-1

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

3) 图没有负循环。

我确定其中一个是正确的,但我的助教说其中两个是正确的。对这些问题有任何想法或提示吗?

【问题讨论】:

  • 这对于 Stack Overflow 来说似乎有点过于宽泛了;也许它更适合science SE sites之一?
  • 什么!!太板?不,我不这么认为。 @GoBusto

标签: math graph graph-theory shortest-path bellman-ford


【解决方案1】:

让我们一次一个地看一下这些语句:

1) 从s 开始的所有最短路径中的边数最多为k-1

考虑下图:

s ---e1---> n1 ---e2---> n2 ---e3---> n3

如果边按给定的顺序排列 (e1, e2, e3),那么在第一次迭代后,您将获得每个节点的正确距离(检查 e1 更新 n1,然后检查 e2 更新 n2 和很快)。所以在这种情况下,算法在k=2 迭代后停止,因为第二次迭代没有改变任何东西。最长最短路径中的边数为3,而3 <= 2-1 不成立。因此,这种说法是错误的。但是,如果同时评估所有边,则该语句是正确的(每次迭代只能比上一次迭代更远一条边)。

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

边的数量和它们的总权重都不受k-1 的限制。考虑上例中所有边的权重为 1000。很明显与k 没有任何连接。

3) 图没有负循环。

如果您像以前那样定义算法(在没有进行任何更改时终止),那么这是正确的。任何负循环都会导致无限循环,因为这个循环中顶点的距离会不断减小。

【讨论】:

  • 答题卡上说两个句子是正确的。 “但是,同时评估所有边,那么该语句是正确的”是什么意思
  • 例如检查以 SIMD 方式并行完成。或者制作旧状态的副本并在该副本上执行检查(这将浪费时间和内存)。答题纸不一定正确。
  • 是否可以更详细地了解“同时评估所有边”?您能否添加一个示例以进行说明?
  • 它只是意味着对并行化内部循环的算法的修改。它不能在普通 CPU 上轻松完成,并且与您链接的代码无关(第 12 页)。此外,代码不具有算法在未进行任何更改时终止的条件(但在恒定数量的迭代之后)。这是对任务的修改吗?
  • 我在谷歌上找到的。谢谢。是的,该算法运行常数,而不是在没有改变时运行....是的,你是对的。但我的误解是为什么我们有并行性(1)是真的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-04
  • 1970-01-01
  • 2015-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多