CMPS 6610/4610 – Fall 2016 1
CMPS 6610/4610 – Fall 2016
Minimum Spanning Trees
Carola Wenk
Slides courtesy of Charles Leiserson with changes and additions by Carola Wenk
Minimum Spanning Trees Carola Wenk Slides courtesy of Charles - - PowerPoint PPT Presentation
CMPS 6610/4610 Fall 2016 Minimum Spanning Trees Carola Wenk Slides courtesy of Charles Leiserson with changes and additions by Carola Wenk CMPS 6610/4610 Fall 2016 1 Minimum spanning trees Input: A connected, undirected graph G = ( V
CMPS 6610/4610 – Fall 2016 1
Slides courtesy of Charles Leiserson with changes and additions by Carola Wenk
CMPS 6610/4610 – Fall 2016 2
T v u
) , (
CMPS 6610/4610 – Fall 2016 3
CMPS 6610/4610 – Fall 2016 4
Grow an MST by greedily adding one edge at a time.
T while T does not form a spanning tree { // Maintain invariant that T is a subset of an MST for G Find a “safe” edge {u,v} such that T{{u,v}} is a subset
T T {{u,v}} } return A }
CMPS 6610/4610 – Fall 2016 5
CMPS 6610/4610 – Fall 2016 6
CMPS 6610/4610 – Fall 2016 7
CMPS 6610/4610 – Fall 2016 8
CMPS 6610/4610 – Fall 2016 9
CMPS 6610/4610 – Fall 2016 10
CMPS 6610/4610 – Fall 2016 11
Q V key[v] for all v V key[s] 0 for some arbitrary s V while Q do u EXTRACT-MIN(Q) for each v Adj[u] do if v Q and w(u, v) < key[v] then key[v] w(u, v)
[v] u
Dijkstra: while Q do u EXTRACT-MIN(Q) S S {u} for each v Adj[u] do if d[v] > d[u] + w(u, v) then d[v] d[u] + w(u, v)
CMPS 6610/4610 – Fall 2016 12
u EXTRACT-MIN(Q) for each v Adj[u] do if v Q and w(u, v) < key[v] then key[v] w(u, v)⊳ DECREASE-KEY [v] u
CMPS 6610/4610 – Fall 2016 13
u EXTRACT-MIN(Q) for each v Adj[u] do if v Q and w(u, v) < key[v] then key[v] w(u, v)⊳ DECREASE-KEY [v] u
CMPS 6610/4610 – Fall 2016 14
u EXTRACT-MIN(Q) for each v Adj[u] do if v Q and w(u, v) < key[v] then key[v] w(u, v)⊳ DECREASE-KEY [v] u
CMPS 6610/4610 – Fall 2016 15
u EXTRACT-MIN(Q) for each v Adj[u] do if v Q and w(u, v) < key[v] then key[v] w(u, v)⊳ DECREASE-KEY [v] u
CMPS 6610/4610 – Fall 2016 16
u EXTRACT-MIN(Q) for each v Adj[u] do if v Q and w(u, v) < key[v] then key[v] w(u, v)⊳ DECREASE-KEY [v] u
CMPS 6610/4610 – Fall 2016 17
u EXTRACT-MIN(Q) for each v Adj[u] do if v Q and w(u, v) < key[v] then key[v] w(u, v)⊳ DECREASE-KEY [v] u
CMPS 6610/4610 – Fall 2016 18
u EXTRACT-MIN(Q) for each v Adj[u] do if v Q and w(u, v) < key[v] then key[v] w(u, v)⊳ DECREASE-KEY [v] u
CMPS 6610/4610 – Fall 2016 19
u EXTRACT-MIN(Q) for each v Adj[u] do if v Q and w(u, v) < key[v] then key[v] w(u, v)⊳ DECREASE-KEY [v] u
CMPS 6610/4610 – Fall 2016 20
u EXTRACT-MIN(Q) for each v Adj[u] do if v Q and w(u, v) < key[v] then key[v] w(u, v)⊳ DECREASE-KEY [v] u
CMPS 6610/4610 – Fall 2016 21
u EXTRACT-MIN(Q) for each v Adj[u] do if v Q and w(u, v) < key[v] then key[v] w(u, v)⊳ DECREASE-KEY [v] u
CMPS 6610/4610 – Fall 2016 22
u EXTRACT-MIN(Q) for each v Adj[u] do if v Q and w(u, v) < key[v] then key[v] w(u, v)⊳ DECREASE-KEY [v] u
CMPS 6610/4610 – Fall 2016 23
u EXTRACT-MIN(Q) for each v Adj[u] do if v Q and w(u, v) < key[v] then key[v] w(u, v)⊳ DECREASE-KEY [v] u
CMPS 6610/4610 – Fall 2016 24
u EXTRACT-MIN(Q) for each v Adj[u] do if v Q and w(u, v) < key[v] then key[v] w(u, v)⊳ DECREASE-KEY [v] u
CMPS 6610/4610 – Fall 2016 25
CMPS 6610/4610 – Fall 2016 26
CMPS 6610/4610 – Fall 2016 27
CMPS 6610/4610 – Fall 2016 28
CMPS 6610/4610 – Fall 2016 29
CMPS 6610/4610 – Fall 2016 30
CMPS 6610/4610 – Fall 2016 31
CMPS 6610/4610 – Fall 2016 32
CMPS 6610/4610 – Fall 2016 33
CMPS 6610/4610 – Fall 2016 34
CMPS 6610/4610 – Fall 2016 35
CMPS 6610/4610 – Fall 2016 36
CMPS 6610/4610 – Fall 2016 37
CMPS 6610/4610 – Fall 2016 38
CMPS 6610/4610 – Fall 2016 39
CMPS 6610/4610 – Fall 2016 40
CMPS 6610/4610 – Fall 2016 41
The representative is underlined
CMPS 6610/4610 – Fall 2016 42
S S will contain all MST edges for each v V do MAKE-SET(v) Sort edges of E in non-decreasing order according to w For each (u,v) E taken in this order do if FIND-SET(u) FIND-SET(v) ⊳ u,v in different trees S S {(u,v)}
O(|V|) O(|E|log|E|) O((|V|)) O(|E|
CMPS 6610/4610 – Fall 2016 43