【发布时间】:2016-09-26 23:18:50
【问题描述】:
请帮助我填补我的知识空白(自学):
到目前为止,我知道给定一个包含 N 个顶点和边的图,我们希望形成一个具有 N-1 条边的 MST
我们按边的重量排序
我们创建了一组子集,其中每个顶点都有自己的子集。所以如果我们有 {A,B,C,D} 作为我们的初始顶点集,我们现在有 {{A}, {B}, {C}, {D}}
我们还创建了一个集合 A 来保存答案
我们沿着有序边的列表向下移动。我们看它的顶点,所以 V1 和 V2。如果它们在单独的子集中,我们可以连接这两个子集,并将边添加到包含我们边的集合 A 中。如果它们在同一个子集中,我们转到下一个选项(因为它是一个循环)
我们继续这种模式,直到到达 Edge 列表的末尾,或者达到顶点数 - 1 代表我们的集合 A 的长度。
如果上述断言属实,我的以下问题与实现有关:
如果我们使用 list[] 来保存包含该顶点的集合的子集:
子集 = [[1][2][3][4][5][6][7]]
每条边由需要寻找两个子集组成 所以我们需要找到 (6,7)
结果是
my_path = [(6,7)] #包含所有路径 子集 = [[1][2][3][4][5][6,7]]
不会在子集中找到子集需要太长时间才能成为 O(nlog(n))
有更好的方法还是我这样做正确?
【问题讨论】:
标签: python graph kruskals-algorithm