Minimum Spanning Trees
a b d f g e c
a b d f g e c
a b d f g e c
a b d f g e c
a b d f g e c Minimum spanning tree weight = 0
Systematic Approach: -Grow a spanning tree A -Always add a safe edge to A that we know belongs to some minimal spanning tree
a b d f g e c R
a b d f g e c R There must go exactly one edge from b to the minimum spanning tree. Which edge should we choose? Are all three a possibility (maybe suboptimal)? Could the 7 edge be optimal to choose? What about the two 5 edges?
a b d f g e c R There must go exactly one edge from b to the spanning tree. Which edge should we choose? Are all three a possibility? Yes, every vertex will connect to the tree Could the 7 edge be optimal to choose? No, we must connect with a light edge What about the two 5 edges? The red is possible, but they both are !!
a b d f g e c R’
a b d f g e c R’
a b d f g e c R’
a b d f g e c R’
a b d f g e c R’
a b d f g e c R’
a b d f g e c R’
a b d f g e c R’
a b d f g e c R’’
a b d f g e c R’’
a b d f g e c R’’’
Kruskal’s Algorithm
Idea: Rethink the previous algorithm from vertices to edges -Initially each vertex forms a singleton tree -In each iteration add the lightest edge connecting two trees in the forest.
a b d f g e c
a b d f g e c
a b d f g e c
a b d f g e c
a b d f g e c
a b d f g e c
a b d f g e c
a b d f g e c
a b d f g e c R’’’
MSTkruskal(G,w) 1 A Ø 2 for each vertex v V[G] 3 do MakeSet(v) 4 sort the edges of E into nondecreasing order by weight w 5 for each edge (u,v) E, taken in nondecreasing order by weight 6 do if FindSet(u) FindSet(v) 7 then A A {(u,v)} 8 Union(u,v) 9 return A
MSTkruskal(G,w) 1 A Ø 2 for each vertex v V[G] 3 do MakeSet(v) 4 sort the edges of E into nondecreasing order by weight w 5 for each edge (u,v) E, taken in nondecreasing order by weight 6 do if FindSet(u) FindSet(v) 7 then A A {(u,v)} 8 Union(u,v) 9 return A Time?
MSTkruskal(G,w) 1 A Ø 2 for each vertex v V[G] 3 do MakeSet(v) 4 sort the edges of E into nondecreasing order by weight w 5 for each edge (u,v) E, taken in nondecreasing order by weight 6 do if FindSet(u) FindSet(v) 7 then A A {(u,v)} 8 Union(u,v) 9 return A Time? O(E*lgE)
MSTkruskal(G,w) 1 A Ø 2 for each vertex v V[G] 3 do MakeSet(v) 4 sort the edges of E into nondecreasing order by weight w 5 for each edge (u,v) E, taken in nondecreasing order by weight 6 do if FindSet(u) FindSet(v) 7 then A A {(u,v)} 8 Union(u,v) 9 return A Time? O(E*lgE) Theorem 21.13: m FindSet, Union, and MakeSet operations of which n are MakeSet operations takes O(m*α(n))
MSTkruskal(G,w) 1 A Ø 2 for each vertex v V[G] 3 do MakeSet(v) 4 sort the edges of E into nondecreasing order by weight w 5 for each edge (u,v) E, taken in nondecreasing order by weight 6 do if FindSet(u) FindSet(v) 7 then A A {(u,v)} 8 Union(u,v) 9 return A Time? O(E*lg(E)) O(V+E*α(V)) = O(V+E*lg(V)) = O(V+E*lg(E)) = O(E*lg(E))
MSTkruskal(G,w) 1 A Ø 2 for each vertex v V[G] 3 do MakeSet(v) 4 sort the edges of E into nondecreasing order by weight w 5 for each edge (u,v) E, taken in nondecreasing order by weight 6 do if FindSet(u) FindSet(v) 7 then A A {(u,v)} 8 Union(u,v) 9 return A O(E*lg(E)) O(V+E*α(V)) = O(V+E*lg(V)) = O(V+E*lg(E)) = O(E*lg(E))
a b d f g e c R Obviously tree. Which edge should we choose?