我正在实施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中是否有这样的实现?
答案 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'在另一边。