无向图中的Push-Relabel最大流算法

时间:2019-01-10 00:20:55

标签: algorithm

如果必须在无向图上运行残差图,我该如何为Goldberg-Tarjan建立残差图? 在幼稚的方法中,我将每个无向边替换为两个反向有向边,但是残差图的每个有向边都需要一个向后(残留)边,因此每个节点之间将有四个有向边,这似乎是错误的。

一次演讲中的重推标签算法的描述:https://resources.mpi-inf.mpg.de/departments/d1/teaching/ws09_10/Opt2/handouts/lecture3.pdf

1 个答案:

答案 0 :(得分:1)

我假设“无向图”是指每对节点之间在两个方向上的容量相同-换句话说,您有一个对称(但有向)容量图-并且您不想考虑结果流具有特定方向。流算法本质上是有方向性的,但是在对称图中也可以正常工作,当您查看结果流时,可以选择忽略其方向。

您唯一需要了解的是,“正向”流向边缘和“反向”流向边缘之间实际上没有区别:相反,每个容量边沿只有一个流向边缘,并且每个流向边缘都链接到一个流向边缘在相反的方向。在有向图中也是如此,因为在一对节点之间的特定方向上没有边缘与具有容量为0的边缘相同。

无论您的容量图是对称的还是不对称的,您总会得到“负对称”的流程图:每对节点之间都有两个流向边缘,并且一个方向上的流向必须为流向的负向在另一个方向。增加一个必须减少另一个,减少一个必须增加另一个。只要不超过容量,正向流量就可以在任一方向上进行。

在一个容量为5且从A到B的流量为3的有向图中,从B到A的流量为-3。从A到B的剩余容量为2,从B到A的剩余容量是3(原始容量为0减去流量为-3)。在“无向”图中,从B到A的容量也将是5,这将导致从B到A的剩余容量为8(原始容量5减去流量-3)。如果现在在“无向”图中将7个单位的流量从B推到A,则从A到B的流量现在为-4,剩余容量为9,从B到A的流量现在为4,并且剩余容量是1。