spanning tree of that has the least cost
E에 엣지 전부 집어넣고 weight 제일 낮은 edge 뺌
그 edge가 사이클을 만들면 버리고 아니면 T에 넣음
T = ∅;
while((T contains less than n − 1 edges) && ((E ≠ ∅)) {
choose a least cost edge (v, w) from E;
delete (v, w) from E;
if((v, w) does not create a cycle in T)
add (v, w) to T;
else
discard (v, w);
}
if(T contains fewer than n − 1 edges)
printf("no spanning tree\\n");
min heap 생성 : O(e * log e)
disjoint set trees 조작 : find O(log n)
union O(1)
→ O(e log n)
e는 n으로 표현 가능. O(e log n)
아무 vertex를 시작점으로 잡음
TV에 속하는 vertex와 adjacent한 edge 중 cost가 제일 낮은 vertex를 추가
/* Assume that G has at least one vertex */
TV = {0}; /* start with vertex 0 and no edges */
for(T = ∅; T contains less than n − 1 edges; add (u, v) to T) {
let (u, v) be a least-cost edge such that u ∈ TV and v ∉ TV;
if (there is no such edge)
break;
add v to TV;
}
if (T contains fewer than n − 1 edges)
printf("no spanning tree\\n");
O(e log n)
generic graph traverse algorithm이 O(n + e * t)
인 거에서 bag
만 힙으로 바뀐 거임! (t → log n)