我正在寻找一种算法来检查给定网络流中是否存在最小切割信号。
我知道这是可能的,因为我们可以查找所有切割,并检查我们是否只有1个最小切割,但我想找到更有效的算法,它以多项式运行。
我想过使用max-flow算法来帮助我,但我没有成功。
答案 0 :(得分:2)
我假设你指的是加权情况,如果没有 - 通过给所有边加权1,非加权可以很容易地减少到加权。
一种方法是找到一个最小切割,让它成为分裂U1,U2,然后对于来自U1的每对顶点u1和来自U2的u2,使得(u1,u2)处于E - 检查是否通过稍微增加重量w(u1,u1) - 仍然有一个具有相同值的最小切口。
最后,当且仅当你发现一条边缘使得最小切割值仍然存在时 - 有超过一分钟的切割。
高级伪代码:
value,U1,U2 = min-cut(G) //value is the minimum cut value, U1,U2 are the cuts
for each u1 in U1 and u2 in U2 such that (u1,u2) is in E:
temp <- w(u1,u2)
w(u1,u2) <- w(u1,u2) + epsilon
new_value,_,_ = min-cut(G)
if (new_value == value): //2+ cuts with same value
return true
//roll back the changed weight
w(u1,u2) <- temp
return false //no cuts with same value found
复杂度为O(E*min-cut)
,其中min-cut是使用的最小切割algorirthm的复杂性