Prims Algorithm
From Rice Wiki
Approach: Greedy
Implementation
for each u in V: key[u] = infinity // cost array pi[u] = infinity // from array Q = new PriorityQueue(V) key[root] = 0 while Q is not empty: u = extractMin(Q) # Reduce nodes for v in adj[u]: if v in Q and w[u,v] < key[v]: key[v] = w[u,v]
Analysis
Priority queue is slower than array when the graph is dense, so sometimes it's better to use Dijsktra's algorithm.
Proof: Greedy
Suboptimality
Given MST tree for the graph G
where the number of edges is , the weight of edges is minimum, and the tree is spanning.
Consider , where X is a leaf node.
Prove that is a MST for the subproblem
By contradiction, assume that is not optimal. There must be such that
Adding the edge (x, y) back to both graphs, we have
Therefore, OPT is not the optimal solution.
By contradiction, must be optimal.