【发布时间】:2017-05-04 02:23:10
【问题描述】:
给定一个边列表,例如边 = [[1,2],[2,3],[3,1],[4,5]]
我需要找出创建了多少个图形,我的意思是这些边创建了多少组组件。然后获取组件组中的顶点数。
但是,我需要能够处理 10^5 条边,我目前无法完成大量边的任务。
我的算法目前正在获取边列表= [[1,2],[2,3],[3,1],[4,5]],如果它们有交集,则将每个列表合并为集合,这将输出一个新列表,该列表现在包含组组件,例如 , graphs = [[1,2,3],[4,5]]
有两个连通分量:[1,2,3] 是连通的,[4,5] 也是连通的。
我想知道是否有更好的方法来完成这项任务。
def mergeList(edges):
sets = [set(x) for x in edges if x]
m = 1
while m:
m = 0
res = []
while sets:
common, r = sets[0], sets[1:]
sets = []
for x in r:
if x.isdisjoint(common):
sets.append(x)
else:
m = 1
common |= x
res.append(common)
sets = res
return sets
我想尝试在字典或其他有效的方法中执行此操作,因为这太慢了。
【问题讨论】:
-
你能发布你的代码吗?
-
这是我目前使用的方法
-
请注意,如果您将代码全部缩进 4 个空格,您的代码将正确格式化。您也可以突出显示它并按下编辑页面顶部的“{}”按钮。