我需要编写一个程序,需要在有向流图中维护一些数据。我需要在运行时计算最大流量。
我知道有几个处理图形的库,实现了几乎所有经典算法,但我的问题是我的图形是动态的,意味着它会在运行时发生变化。每次演变后,我都需要重新计算新的最大流量。
演变可以是以下两种情况之一:
- 添加边
- 增加边缘容量
而我需要重新计算的是从源S到已修改的边缘的目标节点的最大流。例如:
S S
| |
5 5
| |
V V
A---3--->B A---5--->B
adding edge | | increasing | |
B-->D 2 1 A-->B of 2 1
| | two units | |
V V V V
C---3--->D C---3--->D
OUTPUT: 3 OUTPUT: 5
(maxflow S-D) (maxflow S-B)
考虑到我的图形演化的特殊性质,哪种算法/库会更具时间性能?我的意思是,在每一步中,该图形几乎与上一步相同(除了一个边缘),是否有一种算法可以有效地重用其先前计算的中间结果?
我知道每次目标不同使问题变得有点困难... 你有什么好的想法,如何在每个步骤中比O(VE^2)更好?
如果我还考虑这种可能的演变呢?
删除一个节点(以及该节点的所有传入/传出边缘)
我尝试理解所有标准算法,并思考如何修改它们,但由于图论并非我的领域,我失败了...
任何帮助都将不胜感激。 谢谢。