일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 백엔드개발자
- CICD
- 오블완
- 생활코딩
- 42서울
- 프로그래밍
- 온라인테스트
- 전국대학생게임개발동아리연합회
- 개발공부
- 게임개발동아리
- 스프링
- 인프라
- 체크인미팅
- UNICON2023
- 도커
- 위키북스
- UNIDEV
- 인디게임
- RDS
- 프리티어
- 라피신
- 스프링부트
- Developer
- 자바개발자
- 백엔드
- 배포
- EC2
- 티스토리챌린지
- UNICON
- AWS
- Today
- Total
Hyun's Wonderwall
[컴퓨터알고리즘] 15. 최소신장트리 본문
Minimum Spanning Tree
- 무방향 연결 가중치 그래프. n개의 모든 정점 n-1개의 간선으로 연결.
- MST는 유일하지 x
전체 트리의 가중치합..
GENERIC-MST -> A는 매 반복에서 선택된 안전간선들의 집합.
A에 대해 safe edge (u,v)를 찾아서 A에 합한다. 그것을 A 가 최소신장트리 되기 전까지 반복
GENERIC-MST(G,w)
A<-∅
while A does not form a spanning tree do
find a safe edge(u,v) for A
A <- A U {(u,v)}
return A
크루스칼(Kruskal) 알고리즘
- forest를 이룸.
- 가중치값 최소 간선 선택함. (cycle 생기지 않게)
프림(Prim) 알고리즘
- single tree가 계속 확장됨. (시작정점o)
- 트리에 있지 않은 정점을 트리에 연결시키는 가중치값 최소 간선 선택함.
Kruskal 알고리즘의 실행
- 간선이 잇는 정점 이미 같은 집합 안에 있는 경우 (cycle 생기는 경우) 해당 간선은 버려야함!!
- Disjoint-Set Data Structure 서로소 집합구조
- Disjoint Set Union 을 통해 루트노드가 같은지 확인한다 (discard 할 수 있는 원리)
크루스칼 의사코드
- FIND-SET(u) != FIND-SET(v)는 u, v가 같은 트리에 속하지 않음을 확인한다
- 간선 (u,v)가 cycle 형성하거나 해서 추가될 수 없다면 버려진다.
- 그렇지 않으면 A에 추가되고 u, v를 union 한다
MST-KRUSKAL(G,w)
A <- ∅
for each vertex v∈V[G] do
MAKE-SET(V)
SORT the edges of E by nondecreasing weight w
for each edge(u,v)∈E in nondecreasing order do
if FIND-SET(u) != FIND-SET(v) then
A <- A U {(u,v)}
UNION(u,v)
return A
Prim 알고리즘의 실행
- 우선순위 큐 Q에 모든 정점을 담고 시작한다. 트리에 속하지 않는 정점들은 Q에 남아있다.
- 트리에서 갈 수 있는 정점들 중 거리가 최소인 정점을 선택하는 것.
- key[v] = 현재 트리에서 갈 수 있는 최소 거리. (없으면 무한대)
MST-PRIM 의사코드
Q <- V[G] 넣고 시작한다.
MST-PRIM(G,w,r)
Q <- V[G]
for each u ∈ Q do
key[u] <- 무한대
key[r] <- 0
π[r] <- NIL
BUILD-MIN-HEAP(Q) # Q로 최소힙만들기
while Q != ∅ do
u <- EXTRACT-MIN(Q) # 가장 가까운 정점 추출
for each v ∈ Adj[u] do # 인접리스트 원소들 거리 갱신
if v ∈ Q and w(u,v) < key[v] then
π[v] <- u # v의 부모 u 찾아줌
DECREASE-KEY(Q, v, w,(u,v)) # key[v] <- w(u,v) 절차 진행
ExtractMin, ChangeKey(DecreaseKey) 과정을 반복.
'Subjects > 컴퓨터알고리즘' 카테고리의 다른 글
[컴퓨터알고리즘] 14. 그래프 (0) | 2024.06.20 |
---|---|
[컴퓨터알고리즘] 13.2. 그리디 알고리즘 - 허프만 압축 (0) | 2024.06.20 |
[컴퓨터알고리즘] 13. 그리디 알고리즘 (0) | 2024.06.20 |
[컴퓨터알고리즘] 12. 동적 프로그래밍 (0) | 2024.06.20 |
[컴퓨터알고리즘] 11. 레드블랙트리 (0) | 2024.06.19 |