prims and kruskal algorithms

52
Kruskal & Prims Algorithms Saga Valsalan www.SagaValsalan.blogspot.i n www.YouTube.com/SagaValsala n www.Facebook.com/SagaValsal

Upload: saga-valsalan

Post on 11-Apr-2017

171 views

Category:

Education


2 download

TRANSCRIPT

Page 2: Prims and kruskal algorithms

Minimum Spanning Trees (MST)• A minimum spanning tree (MST) or minimum

weight spanning tree is a spanning tree of a connected, undirected graph. • It connects all the vertices together with the

minimal total weighting for its edges.• MST is a tree ,because it is acyclic• Any undirected graph has a minimum spanning

forest, which is a union of minimum spanning trees for its connected components.• If a graph has N vertices then the spanning tree

will have N-1 edges

Minimum Spanning Trees (MST)

Page 3: Prims and kruskal algorithms

Minimum Spanning Trees (MST)

2 199

1

5

13

1725

148

21

Page 4: Prims and kruskal algorithms

Prims Algorithm• Prim's algorithm is a greedy algorithm that

finds a minimum spanning tree for a weighted undirected graph.• It finds a subset of the edges that forms a tree

that includes every vertex, where the total weight of all the edges in the tree is minimized.• The algorithm operates by building this tree

one vertex at a time, from an arbitrary starting vertex, at each step adding the cheapest possible connection from the tree to another vertex.

Page 5: Prims and kruskal algorithms

Prims AlgorithmProcedure:

• Initialize the min priority queue Q to contain all the vertices.• Set the key of each vertex to ∞ and root’s

key is set to zero• Set the parent of root to NIL• If weight of vertex is less than key value

of the vertex, connect the graph.• Repeat the process till all vertex are

used.

Page 6: Prims and kruskal algorithms

MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; while (Q not empty) u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) p[v] = u; key[v] = w(u,v);

Initialize the min priority queue Q to contain all the vertices.

Set the key of each vertex to ∞

Set the parent of root to NIL

Root’s key is set to 0

Until queue become null set

Input– Graph, Weight, Root

Set the parent of ‘v’ as ‘u’

Set the key of v = weight of edge connecting uv

Prims Algorithm

Page 7: Prims and kruskal algorithms

MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; while (Q not empty) u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) p[v] = u; key[v] = w(u,v);

14 10

3

6 45

2

9

15

8

Run on example graph

Prims Algorithm

Page 8: Prims and kruskal algorithms

14 10

3

6 45

2

9

15

8

Run on example graph

MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; while (Q not empty) u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) p[v] = u; key[v] = w(u,v);

Prims Algorithm

Page 9: Prims and kruskal algorithms

0

14 10

3

6 45

2

9

15

8

Pick a start vertex r

r

MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; while (Q not empty) u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) p[v] = u; key[v] = w(u,v);

Prims Algorithm

Page 10: Prims and kruskal algorithms

0

14 10

3

6 45

2

9

15

8

Black vertices have been removed from Q

u

Prims AlgorithmMST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; while (Q not empty) u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) p[v] = u; key[v] = w(u,v);

Page 11: Prims and kruskal algorithms

0

3

14 10

3

6 45

2

9

15

8

Black arrows indicate parent pointers

u

Prims AlgorithmMST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; while (Q not empty) u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) p[v] = u; key[v] = w(u,v);

Page 12: Prims and kruskal algorithms

14

0

3

14 10

3

6 45

2

9

15

8

u

Prims AlgorithmMST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; while (Q not empty) u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) p[v] = u; key[v] = w(u,v);

Page 13: Prims and kruskal algorithms

14

0

3

14 10

3

6 45

2

9

15

8u

MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; while (Q not empty) u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) p[v] = u; key[v] = w(u,v);

Prims Algorithm

Page 14: Prims and kruskal algorithms

14

0 8

3

14 10

3

6 45

2

9

15

8u

MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; while (Q not empty) u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) p[v] = u; key[v] = w(u,v);

Prims Algorithm

Page 15: Prims and kruskal algorithms

10

0 8

3

14 10

3

6 45

2

9

15

8u

MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; while (Q not empty) u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) p[v] = u; key[v] = w(u,v);

Prims Algorithm

Page 16: Prims and kruskal algorithms

10

0 8

3

14 10

3

6 45

2

9

15

8u

MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; while (Q not empty) u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) p[v] = u; key[v] = w(u,v);

Prims Algorithm

Page 17: Prims and kruskal algorithms

10 2

0 8

3

14 10

3

6 45

2

9

15

8u

MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; while (Q not empty) u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) p[v] = u; key[v] = w(u,v);

Prims Algorithm

Page 18: Prims and kruskal algorithms

10 2

0 8 15

3

14 10

3

6 45

2

9

15

8u

MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; while (Q not empty) u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) p[v] = u; key[v] = w(u,v);

Prims Algorithm

Page 19: Prims and kruskal algorithms

10 2

0 8 15

3

14 10

3

6 45

2

9

15

8

u

MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; while (Q not empty) u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) p[v] = u; key[v] = w(u,v);

Prims Algorithm

Page 20: Prims and kruskal algorithms

10 2 9

0 8 15

3

14 10

3

6 45

2

9

15

8

u

MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; while (Q not empty) u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) p[v] = u; key[v] = w(u,v);

Prims Algorithm

Page 21: Prims and kruskal algorithms

10 2 9

0 8 15

3

4

14 10

3

6 45

2

9

15

8

u

MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; while (Q not empty) u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) p[v] = u; key[v] = w(u,v);

Prims Algorithm

Page 22: Prims and kruskal algorithms

5 2 9

0 8 15

3

4

14 10

3

6 45

2

9

15

8

u

MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; while (Q not empty) u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) p[v] = u; key[v] = w(u,v);

Prims Algorithm

Page 23: Prims and kruskal algorithms

5 2 9

0 8 15

3

4

14 10

3

6 45

2

9

15

8

u

MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; while (Q not empty) u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) p[v] = u; key[v] = w(u,v);

Prims Algorithm

Page 24: Prims and kruskal algorithms

5 2 9

0 8 15

3

4

14 10

3

6 45

2

9

15

8

u

MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; while (Q not empty) u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) p[v] = u; key[v] = w(u,v);

Prims Algorithm

Page 25: Prims and kruskal algorithms

5 2 9

0 8 15

3

4

14 10

3

6 45

2

9

15

8

u

MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; while (Q not empty) u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) p[v] = u; key[v] = w(u,v);

Prims Algorithm

Page 26: Prims and kruskal algorithms

5 2 9

0 8 15

3

4

14 10

3

6 45

2

9

15

8

u

MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; while (Q not empty) u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) p[v] = u; key[v] = w(u,v);

Prims Algorithm

Page 27: Prims and kruskal algorithms

MST-Prim(G, w, r) Q = V[G]; for each u Q key[u] = ; key[r] = 0; p[r] = NULL; while (Q not empty) u = ExtractMin(Q); for each v Adj[u] if (v Q and w(u,v) < key[v]) p[v] = u; key[v] = w(u,v);

5 2 9

0 8 15

3

4

3

45

2

9

15

8

Prims Algorithm

Page 28: Prims and kruskal algorithms

Kruskals Algorithm• Kruskal's algorithm is a minimum-

spanning-tree algorithm which finds an edge of the least possible weight that connects any two trees in the forest.• It is a greedy algorithm, adding

increasing cost arcs at each step.• This means it finds a subset of the edges

that forms a tree that includes every vertex, where the total weight of all the edges in the tree is minimized.• To visit all nodes, with minimum cost,

without cycle formation

Page 29: Prims and kruskal algorithms

Kruskal()

{

T = ;

for each v V

MakeSet(v);

sort E by increasing edge weight w

for each (u,v) E (in sorted order)

if FindSet(u) FindSet(v)

T = T U {{u,v}};

Union(FindSet(u), FindSet(v));

}

Kruskals AlgorithmT-TreeE-EdgeV-Verticesv-Vertex

MakeSet(x): S = S U {{x}}Union(Si, Sj): S = S - {Si, Sj} U {Si U Sj}FindSet(X): return Si S such that x Si

Page 30: Prims and kruskal algorithms

2 199

1

5

13

1725

148

21

Run the algorithm:

Kruskal()

{

T = ;

for each v V

MakeSet(v);

sort E by increasing edge weight w

for each (u,v) E (in sorted order)

if FindSet(u) FindSet(v)

T = T U {{u,v}};

Union(FindSet(u), FindSet(v));

}

Kruskals Algorithm

Page 31: Prims and kruskal algorithms

2 199

1

5

13

1725

148

21

Run the algorithm:

Kruskal()

{

T = ;

for each v V

MakeSet(v);

sort E by increasing edge weight w

for each (u,v) E (in sorted order)

if FindSet(u) FindSet(v)

T = T U {{u,v}};

Union(FindSet(u), FindSet(v));

}

Kruskals Algorithm

Page 32: Prims and kruskal algorithms

2 199

1?

5

13

1725

148

21

Run the algorithm:

Kruskal()

{

T = ;

for each v V

MakeSet(v);

sort E by increasing edge weight w

for each (u,v) E (in sorted order)

if FindSet(u) FindSet(v)

T = T U {{u,v}};

Union(FindSet(u), FindSet(v));

}

Kruskals Algorithm

Page 33: Prims and kruskal algorithms

2 199

1

5

13

1725

148

21

Run the algorithm:

Kruskal()

{

T = ;

for each v V

MakeSet(v);

sort E by increasing edge weight w

for each (u,v) E (in sorted order)

if FindSet(u) FindSet(v)

T = T U {{u,v}};

Union(FindSet(u), FindSet(v));

}

Kruskals Algorithm

Page 34: Prims and kruskal algorithms

2? 199

1

5

13

1725

148

21

Run the algorithm:

Kruskal()

{

T = ;

for each v V

MakeSet(v);

sort E by increasing edge weight w

for each (u,v) E (in sorted order)

if FindSet(u) FindSet(v)

T = T U {{u,v}};

Union(FindSet(u), FindSet(v));

}

Kruskals Algorithm

Page 35: Prims and kruskal algorithms

2 199

1

5

13

1725

148

21

Run the algorithm:

Kruskal()

{

T = ;

for each v V

MakeSet(v);

sort E by increasing edge weight w

for each (u,v) E (in sorted order)

if FindSet(u) FindSet(v)

T = T U {{u,v}};

Union(FindSet(u), FindSet(v));

}

Kruskals Algorithm

Page 36: Prims and kruskal algorithms

2 199

1

5?

13

1725

148

21

Run the algorithm:

Kruskal()

{

T = ;

for each v V

MakeSet(v);

sort E by increasing edge weight w

for each (u,v) E (in sorted order)

if FindSet(u) FindSet(v)

T = T U {{u,v}};

Union(FindSet(u), FindSet(v));

}

Kruskals Algorithm

Page 37: Prims and kruskal algorithms

2 199

1

5

13

1725

148

21

Run the algorithm:

Kruskal()

{

T = ;

for each v V

MakeSet(v);

sort E by increasing edge weight w

for each (u,v) E (in sorted order)

if FindSet(u) FindSet(v)

T = T U {{u,v}};

Union(FindSet(u), FindSet(v));

}

Kruskals Algorithm

Page 38: Prims and kruskal algorithms

2 199

1

5

13

1725

148?

21

Run the algorithm:

Kruskal()

{

T = ;

for each v V

MakeSet(v);

sort E by increasing edge weight w

for each (u,v) E (in sorted order)

if FindSet(u) FindSet(v)

T = T U {{u,v}};

Union(FindSet(u), FindSet(v));

}

Kruskals Algorithm

Page 39: Prims and kruskal algorithms

2 199

1

5

13

1725

148

21

Run the algorithm:

Kruskal()

{

T = ;

for each v V

MakeSet(v);

sort E by increasing edge weight w

for each (u,v) E (in sorted order)

if FindSet(u) FindSet(v)

T = T U {{u,v}};

Union(FindSet(u), FindSet(v));

}

Kruskals Algorithm

Page 40: Prims and kruskal algorithms

2 199?

1

5

13

1725

148

21

Run the algorithm:

Kruskal()

{

T = ;

for each v V

MakeSet(v);

sort E by increasing edge weight w

for each (u,v) E (in sorted order)

if FindSet(u) FindSet(v)

T = T U {{u,v}};

Union(FindSet(u), FindSet(v));

}

Kruskals Algorithm

Page 41: Prims and kruskal algorithms

2 199

1

5

13

1725

148

21

Run the algorithm:

Kruskal()

{

T = ;

for each v V

MakeSet(v);

sort E by increasing edge weight w

for each (u,v) E (in sorted order)

if FindSet(u) FindSet(v)

T = T U {{u,v}};

Union(FindSet(u), FindSet(v));

}

Kruskals Algorithm

Page 42: Prims and kruskal algorithms

2 199

1

5

13?

1725

148

21

Run the algorithm:

Kruskal()

{

T = ;

for each v V

MakeSet(v);

sort E by increasing edge weight w

for each (u,v) E (in sorted order)

if FindSet(u) FindSet(v)

T = T U {{u,v}};

Union(FindSet(u), FindSet(v));

}

Kruskals Algorithm

Page 43: Prims and kruskal algorithms

Kruskal()

{

T = ;

for each v V

MakeSet(v);

sort E by increasing edge weight w

for each (u,v) E (in sorted order)

if FindSet(u) FindSet(v)

T = T U {{u,v}};

Union(FindSet(u), FindSet(v));

}

2 199

1

5

13

1725

148

21

Run the algorithm:

Kruskals Algorithm

Page 44: Prims and kruskal algorithms

Kruskal()

{

T = ;

for each v V

MakeSet(v);

sort E by increasing edge weight w

for each (u,v) E (in sorted order)

if FindSet(u) FindSet(v)

T = T U {{u,v}};

Union(FindSet(u), FindSet(v));

}

2 199

1

5

13

1725

14?8

21

Run the algorithm:

Kruskals Algorithm

Page 45: Prims and kruskal algorithms

Kruskal()

{

T = ;

for each v V

MakeSet(v);

sort E by increasing edge weight w

for each (u,v) E (in sorted order)

if FindSet(u) FindSet(v)

T = T U {{u,v}};

Union(FindSet(u), FindSet(v));

}

2 199

1

5

13

1725

148

21

Run the algorithm:

Kruskals Algorithm

Page 46: Prims and kruskal algorithms

Kruskal()

{

T = ;

for each v V

MakeSet(v);

sort E by increasing edge weight w

for each (u,v) E (in sorted order)

if FindSet(u) FindSet(v)

T = T U {{u,v}};

Union(FindSet(u), FindSet(v));

}

2 199

1

5

13

17?25

148

21

Run the algorithm:

Kruskals Algorithm

Page 47: Prims and kruskal algorithms

Kruskal()

{

T = ;

for each v V

MakeSet(v);

sort E by increasing edge weight w

for each (u,v) E (in sorted order)

if FindSet(u) FindSet(v)

T = T U {{u,v}};

Union(FindSet(u), FindSet(v));

}

2 19?9

1

5

13

1725

148

21

Run the algorithm:

Kruskals Algorithm

Page 48: Prims and kruskal algorithms

Kruskal()

{

T = ;

for each v V

MakeSet(v);

sort E by increasing edge weight w

for each (u,v) E (in sorted order)

if FindSet(u) FindSet(v)

T = T U {{u,v}};

Union(FindSet(u), FindSet(v));

}

2 199

1

5

13

1725

148

21?

Run the algorithm:

Kruskals Algorithm

Page 49: Prims and kruskal algorithms

Kruskal()

{

T = ;

for each v V

MakeSet(v);

sort E by increasing edge weight w

for each (u,v) E (in sorted order)

if FindSet(u) FindSet(v)

T = T U {{u,v}};

Union(FindSet(u), FindSet(v));

}

2 199

1

5

13

1725?

148

21

Run the algorithm:

Kruskals Algorithm

Page 50: Prims and kruskal algorithms

Kruskal()

{

T = ;

for each v V

MakeSet(v);

sort E by increasing edge weight w

for each (u,v) E (in sorted order)

if FindSet(u) FindSet(v)

T = T U {{u,v}};

Union(FindSet(u), FindSet(v));

}

2 199

1

5

13

1725

148

21

Run the algorithm:

Kruskals Algorithm

Page 51: Prims and kruskal algorithms

Kruskal()

{

T = ;

for each v V

MakeSet(v);

sort E by increasing edge weight w

for each (u,v) E (in sorted order)

if FindSet(u) FindSet(v)

T = T U {{u,v}};

Union(FindSet(u), FindSet(v));

}

2 199

1

5

13

1725

148

21

Run the algorithm:

Kruskals Algorithm

Page 52: Prims and kruskal algorithms

Thank You