더북(TheBook)

먼저 아주 단순한 FINDUNION 연산을 구현해 보겠습니다.

코드 13-3

class DisjointSet:
    def __init__(self, vnum):
        self.parent = [-1 for _ in range(vnum)]

    def simple_find(self, i):
        while self.parent[i] >= 0:
            i = self.parent[i]
        return i

    def simple_union(self, i, j):
        self.parent[i] = j

코드 13-3을 보면 FINDUNION 연산을 구현했습니다. simple_find() 메서드는 매개변수 i가 속한 집합의 루트를 반환하기 때문에 parent[i] 값이 음수가 되기 전까지 계속해서 루트 쪽으로 타고 올라가면 됩니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.