我有一个图表,我实现为相邻矩阵。 这看起来像这样。
v1 v2 v3 v4
v1 0 1 0 2
v2 1 0 3 0
v3 0 3 0 0
v4 2 0 0 0
在我的代码中,矩阵是一个 int [] [] Matrix;
现在我希望通过枚举获得此图的最小化。但我不知道该怎么做。 我已经知道一些随机的mincut算法,但是对于小图,我想通过枚举找到最小值,就像在Karger和Stein的算法中一样,对于具有Vertex< 6。 这是这个算法的伪代码。
mincut() {
if(V<6)
<return mincut by enumeration>
else
t=1+n/sqrt(2)
G1 = contract(G,t)
G2 = contract(G,t)
return min(mincut(G1),mincut(G2));
}
有人可以解释一下如何通过枚举找到mincut吗?
谢谢。
答案 0 :(得分:0)
因此,通过迭代所有s,t \ in中的所有选择并使用max-flow min-cut theorem和最大流量的多项式时间算法求解得到的最小st切问题,可以在多项式时间内求解最小割问题,例如Ford–Fulkerson algorithm,尽管这种方法并不是最优的。运行时间为O(mn + n ^ 2 \ log n)的最小割问题存在确定性算法。[2]
此处为您详细说明了算法:The Stoer-Wagner Min-cut Algorithm您可以在第3页找到它。