繁体   English   中英

在有向图中找到最小平均重量的周期

[英]Finding the cycle of smallest average weight in a directed graph

我正在寻找一种算法,该算法采用有向加权图(具有正整数权重),并在图中找到平均权重最小(而不是总权重)最小的循环。

基于类似的问题(但考虑总重量),我考虑对Floyd–Warshall算法进行修改,但是它依赖于以下属性,该属性成立(感谢Ron Teller提供了一个反例来说明这一点): “对于顶点U,V,W,如果存在从U到V的路径p1,p2,以及从V到W的路径p3,p4,则这些路径从U到W的最佳组合最好是p1, p2,然后是p3,p4中的较好者。”

我还可以考虑哪些其他算法不依赖此属性?

编辑 :将以下不再相关的段落移至问题下方。

尽管此属性看起来很直观,但在两条同样需要的路径上似乎并不成立。 例如,如果p1的总重量为2,长度为2,而p2的总重量为3,长度为3,则任何一个都不比另一个好。 但是,如果p3和p4的总重量大于长度,则p2优于p1。 在我想要的应用程序中,每个边的权重都是正整数,因此可以强制使用此属性,我想我可以假设,在平局的情况下,越长的路径越好。 但是,我仍然不能证明这是可行的,因此我无法验证任何依赖它的算法的正确性。

“尽管该属性看起来很直观,但在两条同样需要的路径上似乎并不成立。”

实际上,当您考虑两个参数(权重,长度)时,它在任何情况下都不成立,这是一个示例,其中P1本身的平均值小于P2,有时对于最终解决方案可能会更好(示例1)或更糟(示例2),具体取决于P3和P4。

范例1:

L(P1) = 9, W(P1) = 10
L(P2) = 1, W(P2) = 1
L(P3) = 1, W(P3) = 1
L(P4) = 1, W(P4) = 1

范例2:

L(P1) = 9, W(P1) = 10
L(P2) = 1, W(P2) = 1
L(P3) = 5, W(P3) = 10
L(P4) = 5, W(P4) = 10

这两个参数会对无法局部确定的目标函数产生影响,因此经过任何修改的Floyd-Warshall算法将无法正常工作。

由于您仅考虑循环,因此您可能需要考虑采用蛮力算法来验证图中每个循环的平均重量。 您可以在多项式时间内完成,请参见: 在图中找到所有循环

我可以建议另一种算法。

让我们修复C。现在从所有权重中减去C。 答案将如何变化? 如果从所有权重中减去相同的数字,则每个循环的平均权重将在相同的数字C上减小。现在让我们检查一下是否有负平均权重的循环。 平均体重为负的条件等于体重为负的条件。 因此足以检查我们是否拥有负重量的自行车。 我们可以使用Bellman-Ford算法来做到这一点。 如果我们有这样一个循环,则答案小于C。

现在,我们可以通过二进制搜索找到答案。 产生的复杂度将为O(VE log(MaxWeight))

您描述的问题称为最小平均周期问题 ,可以有效解决。 此外,还有一些非常好的优化理论可以检查您是否感兴趣(从标准参考AMO93开始)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM