编程实现带有压缩规则和加权规则的Find和Union算法,写出主程序设置初始集合中只包含一个元素,随机执行union和find的方法,分别打印数组存储情况 Python 实现
时间: 2024-02-05 17:11:51 浏览: 86
以下是带有压缩规则和加权规则的Find和Union算法的Python实现:
```python
class UnionFind:
def __init__(self, n):
self.parent = list(range(n))
self.size = [1] * n
def find(self, x):
if self.parent[x] != x:
self.parent[x] = self.find(self.parent[x])
return self.parent[x]
def union(self, x, y):
px, py = self.find(x), self.find(y)
if px == py:
return
if self.size[px] < self.size[py]:
px, py = py, px
self.parent[py] = px
self.size[px] += self.size[py]
```
接下来是主程序的Python实现:
```python
import random
n = 10 # 初始集合中只包含一个元素
uf = UnionFind(n)
for i in range(20):
x, y = random.randint(0, n-1), random.randint(0, n-1)
if random.randint(0, 1) == 0:
uf.union(x, y)
print(f"Union {x} and {y}")
else:
print(f"{x} and {y} are in the same set: {uf.find(x) == uf.find(y)}")
print(f"Array: {uf.parent}")
```
这个程序将会随机执行20次union和find操作,并且在每次操作后打印出当前数组存储情况。
阅读全文