Union-Find

 

Union-Find (Disjoint Set)

  • 공통 원소가 없는, 즉 “상호 배타적” 인 부분 집합 들로 나눠진 원소들에 대한 정보를 저장하고 조작하는 자료구조

  • tree형 으로 Union-Find 를 구현하면 배열보다 빠르게 Union 연산을 수행할 수 있슴

    • 루트 노드 가 존재 하므로, 각 원소가 속하는 집합 번호를 바로 이 루트 노드의 원소로 정함

      unionFind

      class Node:
        def __init__(self, data):
          self.data = data
          self.parent = self
          self.rank = 0 # height를 의미함
          	
        def make_set(x):
          return Node(x)
            
        def find
      
    • Union 연산

      union

      def union(x,y):
      	setA = find(x) # x가 들어 있는 set tree 찾기
      	setB = find(y) # y가 들어 있는 set tree 찾기
      	if setA != setB: 
      		# 가능하면 height가 높은 tree에 작은 tree를 붙이는게 최종적으로 낮은 height를 유지하기 좋음 
      		if setA.rank > setB.rank:
      			setB.parent = setA
      		else if setA.rank < setB.rank:
      			setA.parent = setB
      		else: 
            # setA.rank == setB.rank 일 경우 어느 쪽에다 연결해도 no problem
      			setA.parent = setB
      			setB.rank += 1
      

Conclusion

Screen Shot 2021-08-28 at 11.12.14 AM


《Reference》

  1. Youtube