1 / 27

Chapter 7: Greedy Algorithms

Chapter 7: Greedy Algorithms. Kruskal’s, Prim’s, and Dijkstra’s Algorithms. Kruskal’s Algorithm. Solves the Minimum Spanning Tree Problem Input: List of edges in a graph n – the number of vertices Output: Prints the list of edges in the Minimum Spanning Tree. 4. 5. A. B. C. 3. 6. 4.

van
Download Presentation

Chapter 7: Greedy Algorithms

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Chapter 7: Greedy Algorithms Kruskal’s, Prim’s, and Dijkstra’s Algorithms

  2. Kruskal’s Algorithm • Solves the Minimum Spanning Tree Problem • Input: • List of edges in a graph • n – the number of vertices • Output: • Prints the list of edges in the Minimum Spanning Tree

  3. 4 5 A B C 3 6 4 5 6 7 3 4 G D E F 7 6 4 5 3 5 5 J H I

  4. 4 5 A B C Kruskal’s 3 6 4 5 6 7 3 4 G D E F kruskal(e, n) { sort(e); 7 6 4 5 3 5 5 J H I

  5. 4 5 5 A B C B B C C 3 6 4 5 6 6 6 7 3 4 7 G D E F G D E E E F 7 6 4 5 7 6 3 5 5 A J H I H I 3 D 3 C E F D 3 4 4 4 G F A B H F G F A 5 H I 4 5 5 5 J J I J E Kruskal’s kruskal(e, n) { sort(e);

  6. 4 5 5 A B C B B C C 3 6 4 5 6 6 6 7 3 4 7 G D E F G D E E E F 7 6 4 5 7 6 3 5 5 A J H I H I 3 D 3 C E F D 3 4 4 4 G F A B H F G F A 5 H I 4 5 5 5 J J I J E A B C D E F G H I J kruskal(e, n) { sort(e); for (i = A to J) makeset(i)

  7. 4 5 5 A B C B B C C 3 6 4 5 6 6 6 7 3 4 7 G D E F G D E E E F 7 6 4 5 7 6 3 5 5 A J H I H I 3 D 3 C E F D 3 4 4 4 G F A B H F G F A 5 H I 4 5 5 5 J J I J E A B C D E F G H I J i 1 Count 0 kruskal(e, n) { ... count = 0; i = 1

  8. 5 B B C C 6 6 7 G D E E E F 7 6 A H I 3 D 3 C E F D 3 4 4 4 G F A B H F G F A 5 H I 4 5 5 5 J J I J E A B C D E F G H I J n 10 count 0 i 1 kruskal(e, n) { while (count < n-1) { if (findset(e[i].v) != findset(e[i].w)) { print(e[i].v + “ ”+ e[i].w); count++; union(e[i].v, e[i].w); } i++; }

  9. 5 B B C C 6 6 7 G D E E E F 7 6 A H I 3 D 3 C E F D 3 4 4 4 G F A B H F G F A 5 H I 4 5 5 5 J J I J E A B C DH E F G I J n 10 Count 1 i 2 kruskal(e, n) { while (count < n-1) { if (findset(e[i].v) != findset(e[i].w)) { print(e[i].v + “ ”+ e[i].w); count++; union(e[i].v, e[i].w); } i++; }

  10. 5 B B C C 6 6 7 G D E E E F 7 6 A H I 3 D 3 C E F D 3 4 4 4 G F A B H F G F A 5 H I 4 5 5 5 J J I J E A B C DH EF G I J n 10 Count 2 i 3 kruskal(e, n) { while (count < n-1) { if (findset(e[i].v) != findset(e[i].w)) { print(e[i].v + “ ”+ e[i].w); count++; union(e[i].v, e[i].w); } i++; }

  11. 5 B B C C 6 6 7 G D E E E F 7 6 A H I 3 D 3 C E F D 3 4 4 4 G F A B H F G F A 5 H I 4 5 5 5 J J I J E ADH B C EF G I J n 10 Count 3 i 4 kruskal(e, n) { while (count < n-1) { if (findset(e[i].v) != findset(e[i].w)) { print(e[i].v + “ ”+ e[i].w); count++; union(e[i].v, e[i].w); } i++; }

  12. 5 B B C C 6 6 7 G D E E E F 7 6 A H I 3 D 3 C E F D 3 4 4 4 G F A B H F G F A 5 H I 4 5 5 5 J J I J E ADH B C EFG I J n 10 Count 4 i 5 kruskal(e, n) { while (count < n-1) { if (findset(e[i].v) != findset(e[i].w)) { print(e[i].v + “ ”+ e[i].w); count++; union(e[i].v, e[i].w); } i++; }

  13. 5 B B C C 6 6 7 G D E E E F 7 6 A H I 3 D 3 C E F D 3 4 4 4 G F A B H F G F A 5 H I 4 5 5 5 J J I J E ADHB C EFG I J n 10 Count 5 i 6 kruskal(e, n) { while (count < n-1) { if (findset(e[i].v) != findset(e[i].w)) { print(e[i].v + “ ”+ e[i].w); count++; union(e[i].v, e[i].w); } i++; }

  14. 5 B B C C 6 6 7 G D E E E F 7 6 A H I 3 D 3 C E F D 3 4 4 4 G F A B H F G F A 5 H I 4 5 5 5 J J I J E ADHB CEFG I J n 10 Count 6 i 7 kruskal(e, n) { while (count < n-1) { if (findset(e[i].v) != findset(e[i].w)) { print(e[i].v + “ ”+ e[i].w); count++; union(e[i].v, e[i].w); } i++; }

  15. 5 B B C C 6 6 7 G D E E E F 7 6 A H I 3 D 3 C E F D 3 4 4 4 G F A B H F G F A 5 H I 4 5 5 5 J J I J E ADHB CEFGJ I n 10 Count 7 i 8 kruskal(e, n) { while (count < n-1) { if (findset(e[i].v) != findset(e[i].w)) { print(e[i].v + “ ”+ e[i].w); count++; union(e[i].v, e[i].w); } i++; }

  16. 5 B B C C 6 6 7 G D E E E F 7 6 A H I 3 D 3 C E F D 3 4 4 4 G F A B H F G F A 5 H I 4 5 5 5 J J I J E ADHBCEFGJ I n 10 Count 8 i 9 kruskal(e, n) { while (count < n-1) { if (findset(e[i].v) != findset(e[i].w)) { print(e[i].v + “ ”+ e[i].w); count++; union(e[i].v, e[i].w); } i++; }

  17. 5 B B C C 6 6 7 G D E E E F 7 6 A H I 3 D 3 C E F D 3 4 4 4 G F A B H F G F A 5 H I 4 5 5 5 J J I J E ADHBCEFGJ I n 10 Count 8 i 10 kruskal(e, n) { while (count < n-1) { if (findset(e[i].v) != findset(e[i].w)) { print(e[i].v + “ ”+ e[i].w); count++; union(e[i].v, e[i].w); } i++; }

  18. 5 B B C C 6 6 7 G D E E E F 7 6 A H I 3 D 3 C E F D 3 4 4 4 G F A B H F G F A 5 H I 4 5 5 5 J J I J E ADHBCEFGJI n 10 Count 9 i 11 kruskal(e, n) { while (count < n-1) { if (findset(e[i].v) != findset(e[i].w)) { print(e[i].v + “ ”+ e[i].w); count++; union(e[i].v, e[i].w); } i++; }

  19. 4 5 5 B B C C 6 6 7 G D E E E F 7 6 A H I 3 D 3 C E F D 3 4 4 4 G F A B H F G F A 5 H I 4 5 5 5 J J I J E A B C 3 6 4 5 6 7 3 4 G D E F 7 6 4 5 3 5 5 J H I

  20. 4 5 5 B B C C 6 6 7 G D E E E F 7 6 A H I 3 D 3 C E F D 3 4 4 4 G F A B H F G F A 5 H I 4 5 5 5 J J I J E A B C 3 6 4 5 6 7 3 4 G D E F 7 6 4 5 3 5 5 J H I

  21. 4 5 A B C A 3 6 4 5 6 7 3 4 G D E F D E B 7 6 4 5 3 5 5 J H I H F G C J I

  22. Theorem 7.2.5 pp. 280 • Let G be a connected, weighted graph, and let G’ be a sub-graph of a minimal spanning tree of G. Let C be a component of G’, and let S be the set of all Edges with one vertex in C and the other not in C. If we add a minimum weight edge in S to G’, the resulting graph is also contained in a minimal spanning tree of G

  23. 4 5 A B C G Minimal Spanning Tree of G Theorem 7.2.5 pp. 280 3 6 4 5 6 A 7 3 4 G D E F 7 6 4 5 D E B 3 • Let G be a connected, weighted graph, and let G’ be a sub-graph of a minimal spanning tree of G. Let C be a component of G’, and let S be the set of all Edges with one vertex in C and the other not in C. If we add a minimum weight edge in S to G’, the resulting graph is also contained in a minimal spanning tree of G 5 5 J H I H F G C J I

  24. 4 5 4 A A B 5 7 D D E E 3 H G’ Subset of Minimal Spanning Tree of G A B C G Theorem 7.2.5 pp. 280 3 6 4 5 6 7 3 4 G D E F A C 7 6 4 5 3 • G’ be a sub-graph of a minimal spanning tree of G. Let C be a component of G’, and let S be the set of all Edges with one vertex in C and the other not in C. 5 5 J H I D E S

  25. 4 5 4 A A B 5 7 D D E E 3 H G’ Subset of Minimal Spanning Tree of G A B C G Theorem 7.2.5 pp. 280 3 6 4 5 6 7 3 4 G D E F A C 7 6 4 5 3 • If we add a minimum weight edge in S to G’, the resulting graph is also contained in a minimal spanning tree of G 5 5 J H I D E S

  26. Theorem 7.2.6: Kruskal’s Algorithm finds minimum spanning tree Proof by induction • G’ is a sub-graph constructed by Kruskal’s Algorithm • G’ is initially empty but each step of the Algorithm increases the size of G’ • Inductive Assumption: G’ is contained in the MST.

  27. Theorem 7.2.6: Kruskal’s Algorithm finds minimum spanning tree Proof by induction • Let (v,w) be the next edge selected by Kruskal’s Algorithm • Kruskal’s algorithm finds the minimum weight edge (v,w) such that v and w are not already in G’ • C can be any subset of the MST, so you can always construct a C such that v is in C and w is not. • Therefore, by Theorem 7.2.5, when (v,w) is added to G’, the resulting graph is also contained in the MST.

More Related