如何用Python找出图中两组顶点之间的割边?
我正在使用NetworkX处理一个包含11个节点的图(代表朋友)。我手动把这个图分成两个组,我想找出连接这两组的边,即割边。
这是我的代码:
import networkx as nx
G = nx.Graph()
edges = [
(1,2),(1,3),(2,3),
(4,5),(5,6),(4,6),
(7,8),(8,9),(9,7),
(10,11),
(3,4),(6,7),(9,10)
]
G.add_edges_from(edges)
group1 = {1,2,3,4,5}
group2 = {6,7,8,9,10,11}
cuts = []
for u, v in G.edges():
if (u in group1 and v in group2) or (u in group2 and v in group1):
cuts.append((u, v))
print(cuts)
这会得到两组之间的割边。
我的问题是:
- 这是找到割边的正确方法吗?
- NetworkX是否有内置函数可以更高效地完成这项工作?
- 如何让分区自动平衡,而不是手动定义分组?
我想找到最小割(最佳分区),而不是手动选择分组。
解决方案
regarding your questions:
- 这是以O(E) 时间复杂度实现的正确方法,因为集合中的
in由于哈希表的原因,查找为O(1)。 - NetworkX有许多内置函数,例如
edge_boundary(G1, group1, group2),你可以在代码中使用它们:
```py import networkx as nx
G = nx.Graph() edges = [(1, 2), (1, 3), (2, 3), (4, 5), (5, 6), (4, 6), (7, 8), (8, 9), (9, 7), (10, 11), (3, 4), (6, 7), (9, 10)] G.add_edges_from(edges)
group1 = {1, 2, 3, 4, 5} group2 = {6, 7, 8, 9, 10, 11}
cut_edges = list(nx.edge_boundary(G, group1, group2)) print(cut_edges) ``` 3.要自动找到平衡的分区,请使用图分区算法
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。