我在Python中實現了一個不相交集合系統,但是我碰到了一堵牆。我爲系統使用樹實現,併爲系統實現Find(),Merge()和Create()函數。Python中的不相交集森林替代實現
我正在實施排名系統和路徑壓縮以提高效率。
美中不足的是,這些功能必須採取一套獨立集合作爲參數,使得遍歷硬盤。
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函數接受值列表並返回包含適當數據的單數節點列表。
我想合併功能將類似於此,
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
,但我不知道如何,因爲它需要採取節點和一個列表執行查找()函數值(不只是一個節點)作爲參數。查找(集合,值)將是原型。
我明白如何實現路徑壓縮當一個節點爲例進行查找(x)的參數,但這種方法是扔我。
任何幫助將不勝感激。謝謝。
編輯澄清。
謝謝。我知道這個實現應該如何處理作爲參數傳遞的節點,然而,這個實現需要這些參數是被搜索和合並的值。 – 2012-02-28 19:59:19