枚举图的最小化

时间:2013-04-29 12:18:10

标签: java algorithm graph

我有一个图表,我实现为相邻矩阵。 这看起来像这样。

       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吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

来自Wikipedia:

  

因此,通过迭代所有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页找到它。