Prim's Algorithm: undirected

Vertex, Priority Queue

// components count is 2
const edges: number[][] = [
  [
    [1, 3]
  ],
  [
    [0, 3],
    [3, 12]
  ],
  [
    [4, 10],
    [5, 20]
  ],
  [
    [1, 12]
  ],
  [
    [2, 10],
    [5, 15]
  ],
  [
    [2, 20],
    [4, 15]
  ]
];

without priority queue

With Priority Queue

change this part

to Priority Queue

Time: O((V + E)logV) Space: O(V)

why?

  • logV?

기본적으로 E가 V보다 갯수가 많다. heap을 구성하는 갯수는 V 갯수가 최대이기 때문에 logV

우리는 기본적으로 V - 1개의 간선이 필요하기 때문이다.

  • why? V

모든 V를 돌린다.

  • why? E

우리는 각 vertex에 연결된 Edge를 큐에 삽입 한다

모든 간선과 Edge를 방문하고 (V + E) 각각 최소힙 삭제, 삽입을 하기 때문에 (V + E)LogV인데

V ≤ E 이므로 O(ELogV)이다

프림 알고리즘(Prim's Algorithm)arrow-up-right

Last updated