알고리즘

쉽게 배우는 알고리즘-08집합의 처리

킹왕짱지지 2023. 10. 23. 12:17

가정: 상호배타적 집합만을 대상으로 하기에 교집합은 없다

  Make-Set(x): 원소 x로만 이루어진 집합을 생성 

  Find-Set(x): 원소 x를 가지고 있는 집합을 알아냄

  Union(x, y): 원소 x를 가진 집합과 원소 y를 가진 집합의 합집합

표현방법 : 연결리스트, 트리

 

1) 연결 리스트

-같은 집합의 원소들은 하나의 연결 리스트로 관리

-연결 리스트의 맨 앞의 원소를 집합의 대표 원소로 삼음

 

[정리 1]

연결 리스트를 이용해 표현되는 배타적 집합에서 무게를 고려한 Union을 사용할 때,

m번의 Make-Set, Union, Find-Set 중

n번이 Make- Set이라면 이들의

총 수행 시간은 O(m + n log n)이다.

 

 

 

 

2)트리

-같은 집합의 원소들은 하나의 트리로 관리 

-자식 노드가 부모 노드를 가리킨다

-집합의 대표원소: 루트

 

연산의 효율을 높이는 방법

① 랭크를 이용한 union

-각 노드는 자신을 루트로 하는 서브트리의 높이를 랭크Rank라는 이름 으로 저장한다

-두 집합을 합칠 때 랭크가 낮은 집합을 랭크가 높은 집합에 붙인다

② 경로 압축

- Find-Set을 행하는 과정에서 만나는 모든 노드들이 직접 루트를 가리 키도록 포인터를 바꾸어 준다