无向加权图分区

时间:2015-03-06 20:46:39

标签: algorithm language-agnostic graph-algorithm

我需要以不再连接节点X和节点Y的方式对图表进行分区。此外,删除边的权重之和必须是最低的权重。

例如:

    3       1       2
X ----- Z ----- W ----- Y

应该成为:

    3               2
X ----- Z       W ----- Y

我首先想到我可以使用一个循环来计算X和Y之间的最短路径并删除最便宜的边缘,直到没有更多的路径。然而,在考虑之后,我意识到这种方法在所有情况下都不起作用。

在Wikipedia中搜索带我到Kernighan-Lin和Fiduccia-Mattheyses算法,但看起来它们似乎是为了解决其他分区问题。

是否有解决此问题的标准算法?

1 个答案:

答案 0 :(得分:4)

您正在寻找的是图表的最小切割。

通过Max-flow_min-cut_theorem,最小切割的值等于最大流量的值。

计算网络中的最大流量是一个标准问题,根据图表的性质,有几种算法可用于计算。

一个好的教程是here on topcoder

以下是使用Networkx library计算图表值的示例Python代码:

import networkx as nx
G = nx.Graph()
G.add_edge('x','z', capacity = 3)
G.add_edge('z','w', capacity = 1)
G.add_edge('w','y', capacity = 2)
print nx.minimum_cut_value(G, 'x', 'y')