Я внедряю систему непересекающихся множеств в 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 принимает список значений и возвращает список единичных узлов, содержащих соответствующие данные.
Я думаю, функция слияния будет выглядеть примерно так:
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) будет прототипом.
Я понимаю, как реализовать сжатие пути, когда Node принимается в качестве параметра для Find (x), но этот метод отбрасывает меня.
Любая помощь будет принята с благодарностью. Спасибо.
Отредактировано для уточнения.