私がこれまでに持っているものは、Cormen et al. による「Introduction To Algorithms」の 571 ページに大きく基づいています。
私はセットを表す Python の Node クラスを持っています:
class Node:
def __init__(self, parent, rank = 0):
self.parent = parent
self.rank = rank
この実装ではList
、ノードの 1 つをフォレストとして使用します (セットを格納するためのより良い方法を受け入れます)。
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 とsを実行するとエラーが発生しますMerge
。つまりFind
、適切なセットが返されないため、Merge
も適切に機能しているかどうかわかりません。機能が適切に実装されていることを確認するための助けをいただければ幸いです。