Prim's 프림 알고리즘

강준호·2021년 11월 28일
0

알고리즘

목록 보기
4/10
post-thumbnail

신장트리

  • G 안에 있는 모든 정점을 다 포함하면서 트리가 되는 연결 그래프
    (비 순환적, 연결된, 비방향성)이 보장되어야함

MST : 최소 신장 트리

  • 모든 신장트리 중에서 가중치의 합이 최소가 되는 신장트리

Brute- Force 방법

  • 간선의 개수가 n-1이 될때까지 간선을 하나씩 제거
    트리를 만들면 edge의 개수는 n-1개.

Greedy Approach

프림 알고리즘

High-Level 알고리즘

수도 코드

  • nearest[i]. i 는 V-Y 에 있는 얘고,그 값은 Y에 있는 vi랑 가장 가까운 놈을 의미.

    여기서 nearest[5] = 3이 젤 가까운 vertex.
  • distance[5] = 8. 가장 작은 edge weight.

  • nearest에서 1은 이미 들어가 있으니까 2~n 까지. Y에 v1은 이미 넣었다고 가정.

    Y에 1밖에 없으니 초기화 할때 제일 가까운 nearest은 1이돼.
    distance 는 W[1][i]. 즉 vi와 v1과의 거리

  • 새로 편입된 놈들은 vnear에. 그리고 얘네는 -1로 설정해서
    다음 loop를 돌때 0<=distance[i]<= min 에 해당되지 않게 해. => 다음선택을 위한 후처리.

새로 편입된 놈 과 distance[i] 를 비교했을때 새로 편입된 놈이 더 짧으면 그때만 바꿔줘.

성능

루프 두개가 B.O 따라서 2(n-1)(n-1) = O(n^2)

0개의 댓글