1일 제외한 공통된 약수가 없다.
즉, 교집합이 없다!
집합들이 존재할 때, 각 집합의 하나의 특정 멤버를 통해 각 집합을 구분한다.
이를 대표자(representative)라 한다.
이 대표자가 집합의 식별자 역할을 한다.
서로소 집합을 표현하는 방법은 2가지
유니온 파인드 문제들은 위 연산 3가지를 통해 문제를 해결할 수 있다.
유니온 파인드 개념을 이해하고, 해당 연산을 이해하고 약간의 외우기가 필요하다.
Make-Set(x) :
p[x] = x ;
대표자 배열을 1차원으로 만들어주고, 그걸 p[]라고 하면,
Make-Set(x)는 자기 자신을 집합으로 만들어주는 것이니까,
x 의 대표는 자기 자신일 것이다.
Find-Set(x) :
if Find-Set(x) == x :
return x;
else :
return Find-Set(p[x]);
대표자를 찾는데, 만약 대표자랑 자기랑 같으면, 그게 대표자죠.
그러니까 자기 자신을 찾으면 x를 return 해주고,
만약 자기 자신이 아니라면, 자기자신의 부모를 파라미터로 넘겨주고 또 대표자를 찾도록 재귀함수를 호출!
if Find-Set(x) == Find-Set(y) :
return;
p[Find-Set(y)] = Find-Set(x);
두 집합을 통합하면, 각 집합의 대표자들을 찾고, y의 대표자 하위에 있는 모든 집합들을 x의 집합 안에 넣어야 하니까, 위와 같은 코드가 나오게 됨.