流网络中最小割的方向性

时间:2016-05-20 00:36:12

标签: algorithm max-flow

我不确定我是否对mincut有误解,但我已经使用edmond-karps写了一个mincut算法,然后在流网络上写了一个BFS。

如果我告诉它从A到B进行最小化,它就可以工作,因为剩余流量A-> B = 0,所以它产生集合{A},切割为A-> B( 1)。

但是,如果我告诉它从B到A做一个小切割,它不会增加任何边缘(因为没有来自C的边缘),所以得到的集合是{C},切割为B-> C(2)。

我看到它的方式,我可能会以两种方式之一误解这一点。首先,从B到A的最小切割可能是正确的,因为只有B组的边缘会被计算,而不是边缘(意味着mincut要求“不允许B连接到A的最小值是多少”,而不是“将图表拆分为2个分区的最小值是多少。

或者,如果要求您在流网络上找到mincut(一般的最小切割,我当前正在使用“选择任意源,尝试所有其他节点”方法),它必须要求相同的流量任何边缘的两个方向。

sample graph

1 个答案:

答案 0 :(得分:1)

“source = B,sink = A”的'正确'min-cut为0,因为没有边B-> A(等效地,c(B,A)= 0);看起来你的实现可能会回答一个不同的问题。您是否正在检查BFS阶段中每条潜在的最短路径,以确保它在接收器处结束?

  

(意思是mincut问“不允许B到什么的最小值   连接到A“,而不是”拆分图表的最小值   进入2个分区)。

是的,第一个:我们只关心从源到汇的瓶颈(最大流量最小割定理)。 Min-cut 将图表分成两部分进行“分区”,但还有一个额外的要求,即源和接收器在不同的集合中。

  

(一般的最小切割,我目前正在使用“选择任意源,尝试所有其他节点”方法)

如果您说“将所有其他节点视为接收器”,则这是对源的外边缘的简单度数计算。

编辑:它不是一个度数计算,因为边是加权的,但它只是加起边权重,不需要搜索。

  

在任何边缘都必须要求两个方向都有相同的流量。

不存在这样的要求(流网络是有向图 - 任何无向边都映射到两个反平行边,对于特定的流问题,只使用其中一个边)。