algorithm - 将加权直接循环图转换为等效的无环图

标签 algorithm graph-algorithm

我有一个循环加权有向图,目标是删除路径中存在的循环。

例如:路径如下,

from | to | weight
------------------
a    -> b | 0.5
a    -> c | 0.5
c    -> e | 1
b    -> d | 1
d    -> a | 0.25
d    -> f | 0.75

图中的循环是由路径d -> a引入的。任何人都可以建议一种算法来通过调整其他节点的权重来删除循环 d -> a 。生成的无环图在将权重传递给端节点 e、f 方面是等价的。

谢谢, 维维克

最佳答案

Sleator–Tarjan 将其称为非循环流问题,并在其 first paper on dynamic trees 的第 389 页描述了一个 O(m log n) 时间的解决方案.如果您不需要最快的算法,请重复使用深度优先搜索找到一个流量循环,然后反向发送取消一个或多个弧的最小流量。

在你的图表上:

a    -> b | 0.5
a    -> c | 0.5
c    -> e | 1
b    -> d | 1
d    -> a | 0.25
d    -> f | 0.75

DFS 找到一个循环 a -0.5> b -1> d -0.25> a。在同一周期发送 -0.25

a    -> b | 0.5 - 0.25 = 0.25
a    -> c | 0.5
c    -> e | 1
b    -> d | 1 - 0.25 = 0.75
d    -> f | 0.75

我们删除

d    -> a | 0.25 - 0.25 = 0

流程是非循环的,所以我们停止。

关于algorithm - 将加权直接循环图转换为等效的无环图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16685870/

相关文章:

java - 这个括号组合的时间复杂度是多少?

python - Karatsuba 递归错误 : maximum recursion depth exceeded while calling a Python object

graph - 使用 Hadoop/MapReduce 查找连接组件

c - 按顺序排列六面体角点坐标的算法

java - Java中的深度优先搜索

c# - 处理 CAD 绘图中的不精确性

algorithm - 在六边形网格中找到所有长度为 n 的可能路径

java - 给定一组点,找到三角形的最大数量

google-maps - 有一些限制的旅行推销员

algorithm - 在 DFS 中对一个顶点使用 3 个状态有什么好处?