프림 알고리즘(Prim's algorithm)
가중치가 있는 연결된 무향 그래프의 모든 꼭짓점을 포함하면서 각 변의 비용의 합이 최소가 되는 부분 그래프인 트리, 즉 최소 비용을 찾는 알고리즘이다. (greedy algorithm 임)개요
프림 알고리즘은 아래의 순서대로 작동한다:- 그래프에서 임의의 하나의 정점을 선택한다.
- 선택한 정점과 인접하는 정점들중 최소 비용의 간선이 존재하게되는 정점을 선택한다.
- 1.2 과정을 반복 하여 모든 정점이 선택될까지 한다.
알고리즘이 종료됐을 때 만들어진 트리는 최소 비용 신장트리가 된다.
동작 예제
Prim’s Algorithm pseudocode
Priority Queue Implementation
Q ← PQinit()for each vertex v in graph G
key(v) ← ∞
pred(v) ← nil
PQinsert(v, Q)
key(s) ← 0
while (!PQisempty(Q))
v = PQdelmin(Q)
for each edge v-w s.t. w is in Q
if key(w) > c(v,w)
PQdeckey(w, c(v,w), Q)
pred(w) ← v
설명
v : vertex 정점
key : 가중치 또는 비용
PQ : 우선순위 Queue
edge : 간선,정점과 다른 정점 사이의 선
소스코드
C, pasted just now:
Output: |
우선 순위 Q를 구현하지는 않았고 배열에 들어있는 값을 순차 비교를 하는 방식으로 구현하였습니다.
참고
https://ko.wikipedia.org/wiki/%ED%94%84%EB%A6%BC_%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98
http://www.cs.princeton.edu/courses/archive/spr02/cs226/lectures/mst-4up.pdf
댓글 없음:
댓글 쓰기