我需要以不再连接节点X和节点Y的方式对图表进行分区。此外,删除边的权重之和必须是最低的权重。
例如:
3 1 2
X ----- Z ----- W ----- Y
应该成为:
3 2
X ----- Z W ----- Y
我首先想到我可以使用一个循环来计算X和Y之间的最短路径并删除最便宜的边缘,直到没有更多的路径。然而,在考虑之后,我意识到这种方法在所有情况下都不起作用。
在Wikipedia中搜索带我到Kernighan-Lin和Fiduccia-Mattheyses算法,但看起来它们似乎是为了解决其他分区问题。
是否有解决此问题的标准算法?
答案 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')