日元的正确性Bellman-Ford算法的优化

时间:2016-11-24 02:07:16

标签: algorithm graph

我正在尝试解决算法介绍中的问题24-1,它指的是日元对Bellman-Ford算法的优化,我在wiki中找到了引言,improvement

  

日元的第二次改进首先在所有顶点上分配一些任意线性顺序,然后将所有边的集合划分为两个子集。第一子集Ef包含所有边(vi,vj),使得i <1。焦耳;第二个Eb包含边(vi,vj),使得i>学家按照v1,v2,...,v | V |的顺序访问每个顶点,从Ef中的那个顶点放宽每个输出边缘。然后按照v | V |,v | V | -1,...,v1的顺序访问每个顶点,从Eb中的那个顶点放宽每个输出边缘。算法的主循环的每次迭代,在第一次迭代之后,将至少两个边缘添加到边缘集合,其宽松距离匹配正确的最短路径距离:一个来自Ef,一个来自Eb。这种修改从| V |减少了算法主循环的最坏情况迭代次数 - 1到| V | / 2。

不幸的是,我无法证明可以使至少两个边缘放松距离的方法如何匹配正确的最短路径距离:一个来自Ef,一个来自Eb。

1 个答案:

答案 0 :(得分:2)

Ef和Eb是非循环的拓扑类型。

让我们证明主循环的上界是| V | / 2

对于所有顶点v,距离源s的最短距离有两个选项。一个是d [s,v] = INFINITE,另一个是d [s,v] = FINITE。因此,我们需要考虑案例d [s,v]是有限的,这意味着必须存在从s到v的最短路径。

假设p =(v0,v1,v2,....,vk-1,vk)是那条路径,其中vo = s和vk = v。让我们考虑一下方向发生变化的次数在p中,即(vi-1,vi)属于Ef并且(vi,vi + 1)属于Eb的情况。基于引理24.2的证明,p具有至多| V | -1个边缘。因此,方向上最多有| V | -2变化。因为Ef和Eb是拓扑排序,所以一旦开始不变化的节点,在单次通过的第一个或第二个半部分中可以使用正确的d值计算路径中没有方向变化的任何部分。方向序列具有正确的d值。方向的每次改变都需要在路径的新方向上进行一半的通过。

    |V-1| | first edge direction | passes
    ----- | -------------------- | ------
    even  | forward              | (|V|-1)/2
    even  | backward             | (|V|-1)/2 +1
    odd   | forward              | |V|/2
    odd   | backward             | |V|/2
  

因此,这种修改减少了最坏情况下的迭代次数   来自| V |的算法的主循环 - 1到| V | / 2。