到目前为止,我所拥有的主要基于 Cormen 等人的“算法简介”的第 571 页。
我在 python 中有一个 Node 类,它代表一个集合:
class Node:
def __init__(self, parent, rank = 0):
self.parent = parent
self.rank = rank
这个实现将使用一个List
节点作为森林(我愿意接受更好的方法来存储集合)。
Initialize()
返回一个节点列表,我将其存储在变量中set
并传递给其他函数。
Find
在森林中搜索值并返回它出现的集合。我选择使用for s in range(len(set)):
,以便在递归中我可以缩小传递的集合列表set[s:]
。
def Find(set, value):
for s in range(len(set)):
if value != set[s].parent:
set[s].parent = Find(set[s:], set[s].parent)
return set[s]
Merge
通过找到它们并提升排名较高的集合来合并森林中的集合。
def Merge(set, value1, value2):
set_val_1 = Find(set, value1)
set_val_2 = Find(set, value2)
if set_val_1.rank > set_val_2.rank:
set_val_2.parent = set_val_1
else:
set_val_1.parent = set_val_2
if set_val_1.rank == set_val_2.rank:
set_val_2.rank += 1
我在执行Find
s 和Merge
s 时遇到了一些错误,即Find
没有返回正确的集合,所以我不确定是否Merge
也能正常工作。我会很感激一些帮助,以确保正确实施这些功能。