约翰逊算法 - 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 函数的主要内容,如果未能解决你的问题,请参考以下文章

遗传算法低维单目标函数优化

遗传算法低维单目标函数优化

遗传算法低维单目标函数优化

遗传算法低维单目标函数优化

JAVA密码学算法实现(第一弹)Hash算法

Powershell 为目录制作一个函数并在末尾添加一个前缀