max_weight_matching#
- max_weight_matching(G, maxcardinality=False, weight='weight')[source]#
计算图 G 的最大权重匹配。
匹配是图中节点不重复的边的子集。 匹配的权重是其所包含边的权重之和。 最大匹配无法再添加更多边且仍保持匹配状态。 匹配的基数是匹配边的数量。
- Parameters:
- GNetworkX 图
无向图
- maxcardinality: bool, 可选 (默认=False)
如果 maxcardinality 为 True,则在所有最大基数的匹配中计算具有最大权重的匹配。
- weight: string, 可选 (默认=’weight’)
对应边权重的边数据键。 如果键未找到,则使用 1 作为权重。
- Returns:
- matchingset
图的最大匹配。
Notes
如果 G 的边具有权重属性,则使用这些边数据作为权重值,否则假设权重为 1。
此函数的时间复杂度为 O(节点数 ** 3)。
如果所有边权重均为整数,则算法仅使用整数计算。如果使用浮点权重,由于数值精度误差,算法可能返回略次优的匹配。
此方法基于寻找增广路径的“花”方法和寻找最大权重匹配的“原始-对偶”方法,这两种方法均由 Jack Edmonds 发明 [1]。
二分图也可以使用
networkx.algorithms.bipartite.matching中的函数进行匹配。References
[1]“Efficient Algorithms for Finding Maximum Matching in Graphs”, Zvi Galil, ACM Computing Surveys, 1986.
Examples
>>> G = nx.Graph() >>> edges = [(1, 2, 6), (1, 3, 2), (2, 3, 1), (2, 4, 7), (3, 5, 9), (4, 5, 3)] >>> G.add_weighted_edges_from(edges) >>> sorted(nx.max_weight_matching(G)) [(2, 4), (5, 3)]