Johnson算法使用Bellman-Ford算法作为子例程来重新为其输入图加权,以消除其边缘的负权重(假设没有负周期)。在标准实现中,添加了一个额外的节点,该节点连接到其他所有权重边缘为0的节点,我们将新的权重定义为:
w'(u,v)= w(u,v)+ h(u)-h(v)
此新重量必须满足两个要求:
在其标准实现中,函数h定义为从添加节点到目标节点的最短路径权重(距离):
h(v)= d(s,v)
所以我想知道的是:否则定义 h 是否有意义?我正在考虑的方面之一是为此需要运行Bellman-Ford。这主要是出于好奇,因此,如果有 h 的“规范”定义的替代方案,即使是很小的细节对我也很重要。
答案 0 :(得分:2)
这里有两个攻角。
第一个是更改w'的定义。当前的定义不仅仅保留最短的路径;它保留了连接相同端点的路径长度之间的差异。对于这里的差距,我没有任何具体想法。不幸的是,任何满足更强属性的重加权都具有关联的h函数。
第二个是更改h的定义。这个角度是没有希望的,因为当我们重写非负条件时,它看起来像
h(w) <= h(v) + d(v, w) for all vw in E,
与最短路径的约束相同(最短路径线性程序还有一个附加约束,即根的距离为零,并且它试图使距离标签的总和最大化)。我不会说您必须做Bellman-Ford,但是从某种意义上说,无论您用来计算h的任何方法,都必须是能够应对负权重的最短路径算法。