justgo_developer

최소비용신장트리(minimum spanning tree)-3 본문

IT/알고리즘

최소비용신장트리(minimum spanning tree)-3

다날92 2018. 1. 5. 18:25
728x90
반응형

서로소인 집합들의 표현

- 각 집합을 하나의 트리로 표현

배열 parent를 만들어 모든 트리를 하나의 배열로 표현


-자신이 속한 트리의 루트를 찾음

FIND-SET(x)

if x≠p[x]

then p[x] <- FIND-SET(p[x])

return p[x]


-한 트리의 루트를 다른 트리의 루트의 자식 노드로 만듬

UNION(u,v)

1. x<-FIND-SET(u);

2. y<-FIND-SET(v);

3. p[x]<-y;


weighted union

- 두 집합을 union할때 작은 트리의 루트를 큰 트리의 루트의 자식으로 만듬(여기서 크기란 노드의 개수)

- 각 트리의 크기(노드의개수)를 카운트하고 있어야

WEIGHTED-UNION(u,v)

1. x<-FIND-SET(u);

2. y<-FIND-SET(v);

3. if size[x]>size[y] then

4.    p[y]<-x;

5.     size[x]<-size[x]+size[y];

6. else

7.    p[x]<-y;

8.    size[y]<-size[y]+size[x];


Path compression

FIND-SET-PC(x)  

1. while x ≠ p[x] do

2.    p[x]<-p[p[x]];  //경로의 길이를 반으로 줄임

3.    x<-p[x];

4. end.

5. return p[x];

728x90
반응형