根据s和t顶点之间的最小切割将图形拆分为两部分

时间:2013-07-16 09:53:59

标签: algorithm graph graph-algorithm

我正在实施min-cut图形聚类,我需要能够拆分一个 根据每个聚类步骤构建的st min-cut,对于某些 s t <,将图表分为两部分 S T / strong>顶点。基本上,我想要一个函数,它采用图形 G ,一个节点 s ,一个节点 t ,并返回两个不相交的节点集 S T

据我所知,找到最小切割的最简单方法是利用min-cut~max-flow对偶性并使用 Push-relabel算法进行最大流量计算。但push-relabel算法并未向我们提供有关 S T 集合的信息。

那么,获得 S T min-cut子集的正确方法是什么?有没有办法使用Push-relabel算法?在C ++或Python中是否有这样的实现?

1 个答案:

答案 0 :(得分:0)

您可以使用push-relabel算法计算的信息来确定最小割。 如您所知,push-relabel算法为每个顶点 v 分配值 h(v) h(v)的可能值在区间[0,N]中,其中N是图形的顶点数。很容易证明存在一些 h',这样每个顶点 v h(v)!= h'(见练习26.4) Cormen的书,第2版)。找到这样的 h'之后,每个顶点 v h(v)&lt; h'位于切割的一侧,每个顶点 u h(u)&gt; h'在另一边。