Kruskal's Algorithm: Difference between revisions

From NovaOrdis Knowledge Base
Jump to navigation Jump to search
Line 16: Line 16:
  sort edges in the order of increasing cost
  sort edges in the order of increasing cost
  initialize T = ∅ <font color=teal># the tree we are growing</font>
  initialize T = ∅ <font color=teal># the tree we are growing</font>
  for edge e = (u,v) in the order of increasing cost:
  for edge e = (u,v) in the order of increasing cost: <font color=teal># at most m iteration</font>
   if T ⋃ e has no [[Graph_Concepts#Cycles|cycles]] <font color=teal># there is no path in T from u to v</font>
   if T ⋃ e has no [[Graph_Concepts#Cycles|cycles]] <font color=teal># there is no path in T from u to v</font>
     add e to T
     add e to T

Revision as of 17:40, 22 October 2021

External

Internal

Overview

Kruskal's algorithms is a greedy algorithm that computes the minimum cost spanning tree for an undirected connected graph. It has a different approach than Prim's algorithm, in that it does not grow the connected explored territory one node at a time, but it grows the trees in parallel with a lot of simultaneous little pieces, unconnected at first, which eventually merge into the minimum cost spanning tree. It does that by sorting the edges in the ascending order of their cost, and picking edges in that order, one by one, careful not to create cycles. The greediness of the algorithm comes from the fact that at each step, it chooses an edge by attempting to minimize a greedy score, which is the cost of the edge.

KruskalAlgorithm.png

Non-Optimized Implementation

sort edges in the order of increasing cost
initialize T = ∅ # the tree we are growing
for edge e = (u,v) in the order of increasing cost: # at most m iteration
  if T ⋃ e has no cycles # there is no path in T from u to v
    add e to T

We could count the edges added to the spanning tree, and once we have n-1 edges, which means the spanning tree is complete, we can abort the loop.

Non-Optimized Implementation Running Time

Sorting the edges will take O(m log m) time. However, since we assume that the number of edges is at most quadratic of the number of vertices, m = O(n2), so O(log m) = O(log n2)=2O(log n)=O(log n). In consequence, the running time of the edge sorting step is O(m log n).

Correctness Proof

https://www.coursera.org/learn/algorithms-greedy/lecture/U3ukN/correctness-of-kruskals-algorithm

Optimized Implementation

https://www.coursera.org/learn/algorithms-greedy/lecture/e0TJP/implementing-kruskals-algorithm-via-union-find-i