Prim’s algorithm is a greedy algorithm used to generate the MST of a weighted, undirected graph.
Pseudocode
Get the actual pseudocode
Algorithm Prim(Graph, optional start):
MST ← Graph ADT
Add start node to T (or random node if start isn't specified)
While T.vertices = G.vertices do: #O(|V|)
Get all outgoing edges from T #O(|E|)
Select cheapest edge e (u-v), where u is in T
If v in T, discard it
Add e to T
End do
Return T
End Algorithm
Complexity
Time Complexity:
for outer while loop x for getting all outgoing edges (inner loop)
Given a complete graph, where = , Prim’s takes = =
Proof Of Correctness
Via Loop Invariants
Loop Invariant: The subtree T generated by Prim’s is a subset of the true MST (T*) for all iterations
Initialization: Before the loop, T contains no edges. Therefore, it can be trivially proven that T is a subset of T*, as an empty set is a subset of all sets:
Maintenance: For each iteration, Prim’s only selects the cheapest edge, , and does not permit it to cause an cycles. According to the cut property, all MSTs contain e, therefore
Termination: The loop terminates only when all the nodes from T* are in T. Since, for each iteration, T is a subset of T*, during the termination of loop T = T*.