The Minimum SpanningTree
Give a graph G = (V, E), the minimum spanning tree (MST) is
a weighted graph G’ = (V, E’) such that:
•E’ E
•G’ is connected
•G’ has the minimum cost
Naïve Algorithm forMST
(Using Exhaustive Search)
MST Empty-Graph
cost
For each subgraph G’ = (V, E’) of G = (V, E) do {
1. Check that G’ is connected
2. Compute cost c of G’
3. If c < cost then {
3.1 MST G’
3.2 cost c }}
What is the complexity “in words” of the algorithm?
“the number of subgraphs” “cost of computing Steps 1-3”
How many subgraphs are there?
2|E|
This is bad!
5.
The Prim Algorithm
1.Select a starting node, v
2. T {v} //the nodes in the MST
3. E {} //the edges in the MST
4. While not all nodes in G are in the T do
3.1 Choose the edge v’ in G − T such that there is a v in T:
weight(v,v’) is the minimum in
{weight(u,w) : w in G − T and u in T}
3.2 T T {v’}
3.3 E E {(v,v’)}
5. return E
// input: a graph G
// output: E: a MST for G
Complexity: - O((|E|+|V|)log2|E|)
- In class we show O(|E||V|)
6.
T
G-T
If there isan edge e between the 2 groups with minimum cost, then
there is an MST containing e
Why does it works?
Property: Suppose that we divide the nodes of a graph
G = (V, E) in two groups V, V’:
5
7
10
22
66
12
6
13
2
20
7.
Visited
Non visited
Example ofa non greedy algorithm?
Example of a “Greedy” Algorithm
Dijkstra-Prim is an example of a greedy algorithm since it
looks at a subset of the larger problem
5
7
10
22
66
12
6
13
2
20
Our naïve algorithm for MST
Unfortunately,
not all problems
can be solved
with greedy
algorithms
The Kruskal Algorithm
1.
2.E {} //the edges in the MST
3. i 1 //counter for EG
4. While do
if adding EG[i] to E does not add a cycle then
E E {EG[i]}
i i + 1
5. return E
// input: a graph G with n nodes and m edges
// output: E: a MST for G
EG[1..m] Sort the m edges in G in increasing weight order
|E| < n - 1
Complexity: O(|E|log2 |E|)
Is this algorithm Greedy?
Yes
10.
Why Does theKruskal Algorithm Works?
Property: If a connected graph G has n nodes, then any
acyclic subgraph G’ of G with n-1 edges is also connected
and includes all n nodes (G’ is a tree)
Corollary: Kruskal’s algorithm returns an MST of G