파이썬에서 분리 시스템을 구현하고 있지만 벽에 부딪혔다. 나는 시스템을위한 트리 구현을 사용하고 시스템의 Find(), Merge() 및 Create() 함수를 구현하고있다.파이썬에서 분리 된 포리스트 설정하기
효율성을 위해 순위 시스템과 경로 압축을 구현하고 있습니다.
캐치 (catch)는 이러한 함수가 매개 변수로 분리 된 세트를 취해야하므로 통과가 어려워집니다.
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
만들기 기능은 값 목록을 가져 와서 적절한 데이터가 포함 된 단일 노드 목록을 반환합니다.
나는
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 (x)에 대한 매개 변수로 사용되는 경우 경로 압축을 구현하는 방법을 알고 있지만이 방법으로 인해 문제가 발생합니다.
도움을 주시면 감사하겠습니다. 고맙습니다.
설명을 위해 편집 됨.
감사합니다. 이 구현은 매개 변수로 전달 된 노드에서 어떻게 작동해야하는지 알지만,이 구현에서는 매개 변수가 검색 및 병합되는 값이어야합니다. –