我正在用 Python 实现一个不相交的集合系统,但我碰壁了。我正在为系统使用树实现,并且正在为系统实现 Find()、Merge() 和 Create() 函数。
我正在实施等级系统和路径压缩以提高效率。
问题是这些函数必须将不相交的集合作为参数,使得遍历变得困难。
class Node(object):
def __init__(self, value):
self.parent = self
self.value = value
self.rank = 0
def Create(values):
l = [Node(value) for value in values]
return l
Create 函数接受一个值列表并返回一个包含适当数据的奇异节点列表。
我在想 Merge 函数看起来与此类似,
def Merge(set, value1, value2):
value1Root = Find(set, value1)
value2Root = Find(set, value2)
if value1Root == value2Root:
return
if value1Root.rank < value2Root.rank:
value1Root.parent = value2Root
elif value1Root.rank > value2Root.rank:
value2Root.parent = value1Root
else:
value2Root.parent = value1Root
value1Root.rank += 1
但我不确定如何实现 Find() 函数,因为它需要将节点列表和一个值(不仅仅是一个节点)作为参数。Find(set, value) 将是原型。
我了解当将节点作为 Find(x) 的参数时如何实现路径压缩,但是这种方法让我失望。
任何帮助将不胜感激。谢谢你。
为澄清而编辑。