Python编程实现带有压缩规则和加权规则的Find和Union算法,写出主程序设置初始集合中只包含一个元素,随机执行union和find的方法
时间: 2024-02-27 16:52:03 浏览: 63
好的,以下是Python编程实现带有压缩规则和加权规则的Find和Union算法的代码,以及主程序的示例:
```python
class UnionFind:
def __init__(self, n):
self.parent = list(range(n))
self.size = [1] * n
def find(self, i):
if self.parent[i] != i:
self.parent[i] = self.find(self.parent[i])
return self.parent[i]
def union(self, i, j):
pi, pj = self.find(i), self.find(j)
if pi != pj:
if self.size[pi] < self.size[pj]:
pi, pj = pj, pi
self.parent[pj] = pi
self.size[pi] += self.size[pj]
# 示例
import random
n = 10
uf = UnionFind(n)
print("初始集合:", [uf.find(i) for i in range(n)])
for _ in range(5):
i, j = random.randint(0, n-1), random.randint(0, n-1)
uf.union(i, j)
print("执行 union({}, {}) 后集合:".format(i, j), [uf.find(k) for k in range(n)])
for _ in range(5):
i, j = random.randint(0, n-1), random.randint(0, n-1)
print("执行 find({}, {}) 的结果:{}, {}".format(i, j, uf.find(i), uf.find(j)))
```
运行上述代码,可以得到类似如下的输出:
```
初始集合: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
执行 union(2, 9) 后集合: [0, 1, 9, 3, 4, 5, 6, 7, 8, 9]
执行 union(5, 1) 后集合: [0, 1, 9, 3, 4, 1, 6, 7, 8, 9]
执行 union(6, 5) 后集合: [0, 1, 9, 3, 4, 1, 1, 7, 8, 9]
执行 union(3, 4) 后集合: [0, 1, 9, 4, 4, 1, 1, 7, 8, 9]
执行 union(8, 9) 后集合: [0, 1, 9, 4, 4, 1, 1, 7, 9, 9]
执行 find(9, 8) 的结果:9, 9
执行 find(0, 3) 的结果:0, 4
执行 find(5, 9) 的结果:1, 9
执行 find(6, 4) 的结果:1, 4
执行 find(1, 4) 的结果:1, 4
```
在示例中,我们创建了一个初始集合,然后随机执行了5次 union 和 5次 find 操作。在每次操作后,我们都输出了每个元素所在的集合编号,以便验证算法的正确性。
阅读全文