约翰逊算法 - h 函数
Posted
技术标签:
【中文标题】约翰逊算法 - h 函数【英文标题】:Johnson's algorithm - h function 【发布时间】:2019-06-20 07:22:11 【问题描述】:Johnson 的算法使用 Bellman-Ford 算法作为子程序来重新加权其输入图以消除其边上的负权重(假设没有负循环)。在标准实现中,在添加一个连接到所有其他节点的额外节点后,权重为 0,我们将新权重定义为:
w'(u,v) = w(u,v) + h(u) - h(v)
这个新的权重必须满足两个要求:
最短路径不变性(重新加权后的图中最短路径相同) 非负边权重(所有边必须具有非负权重)在其标准实现中,函数h因此被定义为从添加节点到目标节点的最短路径权重(距离):
h(v) = d(s,v)
所以我想知道的是:以其他方式定义 h 是否有意义?我正在考虑的一个方面是为此需要运行 Bellman-Ford。这主要是出于好奇,所以如果有替代 h 的“规范”定义的替代方案,即使是小细节对我来说也很重要。
【问题讨论】:
为了确保我能正确回答您的问题 - 您列出了新权重 w' 的两个要求。问题是“仅使用 h 来找到这个新函数 w'吗?”或者你在问为什么选择 h ?或者你在问是否有从 h 定义 w' 的直觉?还是别的什么? 我在问是否还有其他的 h 选择,与标准实现中 h 的“规范”选择相比,这些选择可能有它们的好处。因此,找出 h 的优势/直觉当然是有帮助的! 【参考方案1】:这里有两种攻角。
首先是改变w'的定义。当前的定义不仅仅保留了最短路径;它保留了连接相同端点的路径长度之间的差异。我没有任何具体的想法来利用这里的差距。不幸的是,任何满足更强属性的重新加权都有一个相关的 h 函数。
第二个是改变h的定义。这个角度是没有希望的,因为当我们重写非负条件时,它看起来像
h(w) <= h(v) + d(v, w) for all vw in E,
这与最短路径的约束相同(最短路径线性程序具有根在距离为零的附加约束,并且它寻求最大化距离标签的总和)。我不会说你必须做 Bellman--Ford,但无论你用什么来计算 h,在某种意义上都必须是可以处理负权重的最短路径算法。
【讨论】:
嗯,这些都是好点,谢谢,我会从这两个角度考虑。使用 Bellman-Ford 以外的东西实际上听起来很有趣,所以我会寻找其他可以处理负权重的算法。此外,非常有趣的一点是,当前的定义比要求的要强,这似乎也是一个潜在的富有成果的研究途径。谢谢!以上是关于约翰逊算法 - h 函数的主要内容,如果未能解决你的问题,请参考以下文章