View
13
Download
0
Category
Preview:
Citation preview
Improving Kruskal’s AlgorithmVitaly Osipov, Peter Sanders, Johannes Singler
Universitat Karlsruhe (TH)
Vitaly Osipov, Johannes Singler, Peter Sanders Improving Kruskal’s Algorithm
Motivation
What is the best (practical) algorithm for Minimum Spanning Trees?
Kruskal? for very sparse graphs Jarnık–Prim? else Karger–Klein–Tarjan, Chazelle, Pettie–Ramachandran,. . . ?
too complicated
Vitaly Osipov, Johannes Singler, Peter Sanders Improving Kruskal’s Algorithm
Kruskal’s Algorithm
Procedure kruskal(E , T : Sequence of Edge, P : UnionFind)sort E by increasing edge weightforeach u, v ∈ E do
if u and v are in different components of P thenadd edge u, v to Tjoin the partitions of u and v in P
Time O ((n + m) log m)
Vitaly Osipov, Johannes Singler, Peter Sanders Improving Kruskal’s Algorithm
Quick-Kruskal (Moret–Shapiro, Paredes–Navarro)
Procedure qKruskal(E , T : Sequence of Edge, P : UnionFind)if m ≤ kruskalThreshold(n, m, |T |) then kruskal(E , T , P)else
pick a pivot p ∈ EE≤:= 〈e ∈ E : e ≤ p〉E>:= 〈e ∈ E : e > p〉qKruskal(E≤, T , P)if |T | = n − 1 then exitqKruskal(E>, T , P)
p
Time: O
(
m + n log2 n)
– random graphs, random edge weights
Θ ((n + m) log m) if there is any heavy MST edge,e.g., Lollipop graph with random edge weights
Vitaly Osipov, Johannes Singler, Peter Sanders Improving Kruskal’s Algorithm
Filter-Kruskal
Procedure filterKruskal(E , T : Sequence of Edge, P : UnionFind)if m ≤ kruskalThreshold(n, m, |T |) then kruskal(E , T , P)else
pick a pivot p ∈ EE≤:= 〈e ∈ E : e ≤ p〉E>:= 〈e ∈ E : e > p〉qKruskal(E≤, T , P)if |T | = n − 1 then exitE>:= filter(E>, P)qKruskal(E>, T , P)
Function filter(E)return 〈u, v ∈ E : u, v are in different components of P〉
p
Vitaly Osipov, Johannes Singler, Peter Sanders Improving Kruskal’s Algorithm
Analysis – Arbitrary Graph, Random Weights
Lemma: It suffices to count edge comparisons
Chan’s sampling lemma:
r lightest edges processed ⇒ P [e ∈ E> survives filtering] ≤nr
Optimistic Analysis:Assume edge with rank i is filtered when r = i.
E[#survivors] ≤ n +∑
i>n
ni
= Θ(
n logmn
)
Partitioning m edges and sorting n log mn edges:
Ω(m + n log n logmn
)
Vitaly Osipov, Johannes Singler, Peter Sanders Improving Kruskal’s Algorithm
Analysis – Upper Bound (Outline)
Idea: Generalize textbook analysis of quicksort.0–1-RV X ij := 1 iff edges with ranks i and j are compared.
E [#comparisons] =∑
i≤m
∑
i<j≤m
P[
Xij = 1]
.
strengthen bound on P[
Xij = 1]
using Chan’s sampling lemma.. . .
. . .O(m + n log n log
mn
) expected comparisons
Vitaly Osipov, Johannes Singler, Peter Sanders Improving Kruskal’s Algorithm
Getting rid of the log m/n? E.g., random graphs
2
2.5
3
3.5
4
4.5
32 64 27 28 29 210211212213214215216217218219220221222
com
paris
ons
/ edg
es m
= n
log(
n)
number of nodes n
filterKruskallog(log(x))
Vitaly Osipov, Johannes Singler, Peter Sanders Improving Kruskal’s Algorithm
Filter-Kruskal+
Function filter+(E , T , P)E ′:= 〈u, v ∈ E : u, v are in different components of P〉T ′:= 〈u, v ∈ E ′ : u or v have degree one in comp. graph 〉T := T ∪ T ′
return E ′ \ T ′
p
Vitaly Osipov, Johannes Singler, Peter Sanders Improving Kruskal’s Algorithm
Linear Time? E.g., random graphs
5
10
15
20
25
210 211 212 213 214 215 216 217 218 219 220 221 222 223 224
num
ber
of c
ompa
rison
s / n
number of nodes n
m=nm=2nm=4n
Vitaly Osipov, Johannes Singler, Peter Sanders Improving Kruskal’s Algorithm
Parallelization
Procedure filterKruskal(E , T : Sequence of Edge, P : UnionFind)if m ≤ kruskalThreshold(n, m, |T |) then
kruskal(E , T , P) // parallel sortelse
pick a pivot p ∈ EE≤:= 〈e ∈ E : e ≤ p〉 // parallelE>:= 〈e ∈ E : e > p〉 // partitioningqKruskal(E≤, T , P)if |T | = n − 1 then exitE>:= filter(E>, P) // parallel removeIfqKruskal(E>, T , P)
Easy: available in the Multi-Core Parallel STL (e.g. g++)
Vitaly Osipov, Johannes Singler, Peter Sanders Improving Kruskal’s Algorithm
Running Time: Random graph with 216 nodes
10
100
1 4 16 64 256 1024
time
/ m [n
s]
number of edges m / number of nodes n
KruskalqKruskalKruskal8
filterKruskal+filterKruskal
filterKruskal8qJPpJP
Vitaly Osipov, Johannes Singler, Peter Sanders Improving Kruskal’s Algorithm
Graph Formatting: Random graph with 222 nodes
10
100
1000
10000
1 2 4 8 16 32
time
/ m [n
s]
number of edges m / number of nodes n
List of edges -> Adjacency ArrayAdjacency Array -> List of Edges
filterKruskalpJP
Vitaly Osipov, Johannes Singler, Peter Sanders Improving Kruskal’s Algorithm
Conclusions
filterKruskal improves on Kruskal and Jarnık–Prim very simple often faster parallelizable needs only edge sequence
Todo: More real world inputs, tight analysis,. . .
Open Problem: What about filterKruskal+ provably linear time? scalable parallelization? Sequential component O
(
n0.6)
? more efficient implementation
Vitaly Osipov, Johannes Singler, Peter Sanders Improving Kruskal’s Algorithm
Thank you!
Vitaly Osipov, Johannes Singler, Peter Sanders Improving Kruskal’s Algorithm
Random graph with 210 nodes
10
100
1000
1 2 4 8 16 32 64 128 256
time
/ m [n
s]
number of edges m / number of nodes n
KruskalqKruskalKruskal8
filterKruskal+filterKruskal
filterKruskal8qJPpJP
Vitaly Osipov, Johannes Singler, Peter Sanders Improving Kruskal’s Algorithm
Random graph with 222 nodes
100
1000
1 2 4 8 16
time
/ m [n
s]
number of edges m / number of nodes n
KruskalqKruskalKruskal8filterKruskal+filterKruskalfilterKruskal8qJPpJP
Vitaly Osipov, Johannes Singler, Peter Sanders Improving Kruskal’s Algorithm
Random graph, n = 216, anti-Prim weights
10
100
1000
10000
100000
1 2 4 8 16 32 64 128 256
time
/ m [n
s]
number of edges m / number of nodes n
KruskalqKruskalKruskal8
qJPpJP
filterKruskal
Vitaly Osipov, Johannes Singler, Peter Sanders Improving Kruskal’s Algorithm
Random geometric graph with 216 nodes
10
100
4 8 16 32 64 128 256
time
/ m [n
s]
number of edges m / number of nodes n
KruskalqKruskalKruskal8filterKruskal+filterKruskalfilterKruskal8qJPpJP
Vitaly Osipov, Johannes Singler, Peter Sanders Improving Kruskal’s Algorithm
Lollipop graph with 210 nodes
10
100
1000
1 2 4 8 16 32 64 128
time
/ m [n
s]
number of edges m / number of nodes n
KruskalqKruskalKruskal8
filterKruskal+filterKruskal
filterKruskal8qJPpJP
Vitaly Osipov, Johannes Singler, Peter Sanders Improving Kruskal’s Algorithm
Lollipop graph with 216 nodes
10
100
1 4 16 64 256 1024
time
/ m [n
s]
number of edges m / number of nodes n
KruskalqKruskalKruskal8filterKruskal+filterKruskalfilterKruskal8qJPpJP
Vitaly Osipov, Johannes Singler, Peter Sanders Improving Kruskal’s Algorithm
Lollipop graph with 222 nodes
32
64
128
256
512
1024
1 2 4 8 16
time
/ m [n
s]
number of edges m / number of nodes n
KruskalqKruskalKruskal8filterKruskal+filterKruskalfilterKruskal8qJPpJP
Vitaly Osipov, Johannes Singler, Peter Sanders Improving Kruskal’s Algorithm
Image Segmentation Application
10
100
4 8 16
time
/ m [n
s]
m / n
KruskalqKruskalKruskal8
filterKruskal+filterKruskal
filterKruskal8qJPpJP
4 8 16
m / n
Vitaly Osipov, Johannes Singler, Peter Sanders Improving Kruskal’s Algorithm
Recommended