1 / 64

Minimum Spanning Tree

Minimum Spanning Tree. Wat is MST?. Minimum spanning tree De meest efficiënte manier vinden om een verbonden netwerk op te bouwen. Wat is een tree/boom?. Graaf : een verzameling knopen ( vertices ): een verzameling kanten ( edges ):

erasto
Télécharger la présentation

Minimum Spanning Tree

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. Minimum Spanning Tree

  2. Wat is MST? • Minimum spanning tree • De meest efficiënte manier vinden om een verbonden netwerk op te bouwen

  3. Wat is een tree/boom? • Graaf : • een verzameling knopen (vertices): • een verzameling kanten (edges): • Een boom is een graaf waarin er één uniek simpel pad is tussen elk paar knopen • Een boom is verbonden (connected): je kunt vanuit iedere knoop in iedere andere knoop komen • Een boom bevat geen cykels: je kan niet in een rondje lopen

  4. Hoeveel kanten heeft een boom? • Een boom op knopen heeft kanten • Basisgeval: triviale boom met knoop heeft kanten • Inductiestap: stel iedere boom met knopen heeft kanten. Voor een boom met knopen geldt dan dat…

  5. Hoeveel kanten heeft een boom? • Een boom op knopen heeft kanten • Basisgeval: triviale boom met knoop heeft kanten • Inductiestap: stel iedere boom met knopen heeft kanten. Voor een boom met knopen geldt dan dat… …hij bestaat uit een kant die twee losse bomen verbindt, één met knopen, de ander met knopen. Met de IH hebben ze en knopen. De boom heeft dus knopen 

  6. Definitie MST • “Bepaal de boom met het minste aantal kanten” is dus niet zo spannend… • Gewogen graaf: samen met een wegingsfunctie kent aan iedere kant een gewicht toe (“lengte”) • Minimum spanning tree van een verbonden, gewogen graaf is een deelverzameling zodat een boom is en minimaal is

  7. Voorbeeld MST Gewicht:

  8. MST als optimaliseringsprobleem • Invoer: verbonden, gewogen graaf • Zoekruimte: alle deelverzamelingen van : • Toelaatbaarheid: het moet een boom zijn • Doelfunctie:

  9. Bomen bouwen 1 • Je kunt een bestaande boom aanpassen: • Voeg een kant toe cykel dus geen boom meer • Haal een kant van de cykel weg het is weer een boom

  10. Bomen bouwen 2 • Iedere verbonden graaf heeft een deelverzameling zodat een boom is • Als verbonden maar geen boom is dan bevat een cykel • Gooi willekeurig een kant van die cykel weg • Is het resultaat een nog geen boom? Herhaal! • Gevolg: graaf verbonden en kanten is boom Als geen boom zou zijn zou er een deelverzameling zijn van minder dan kanten die een boom zou zijn ↯

  11. Hoe bepaal je een MST? • Algoritmische trukendoos: • Divide & Conquer • Verdeel de graaf in twee deelgraven? • Verbind de deel-MST’s met de lichtste kant? • Fail… • Dynamisch Programmeren

  12. Hoe bepaal je een MST? • Algoritmische trukendoos: • Divide & Conquer • Verdeel de graaf in twee deelgraven? • Verbind de deel-MST’s met de lichtste kant? • Fail… • Dynamisch Programmeren • OptimalSubstructure: een optimale oplossing bevat een optimale deeloplossing • Een MST bestaat uit MST’s verbonden door edge

  13. Hoe bepaal je een MST? • DP heeft naast OSS ook overlapping subproblems nodig • Het kan wél, maar… • Het probleem heeft een greedychoice property!

  14. Algoritme van Prim • Bouw de boom op door steeds 1 kant toe te voegen • Kies een beginknoop • Bekijk de knopen die je in 1 stap kunt bereiken • Kies de lichtste van de uitgaande kant • Je kiest steeds de lichtste boomverlatende kant

  15. Algoritme van Prim

  16. Algoritme van Prim

  17. Algoritme van Prim

  18. Algoritme van Prim

  19. Algoritme van Prim

  20. Algoritme van Prim

  21. Algoritme van Prim

  22. Algoritme van Prim

  23. Algoritme van Prim

  24. Implementatie van Prim • Hoe kun je snel de lichtste kant vinden? Priority Queue! • Representatie van het resultaat? Parent Pointers

  25. Pseudocode van Prim foreach(Vertex v in graph.Vertices) v.Key = ∞; root.Key = 0;PQ = new PriorityQueue(graph.Vertices); while(!PQ.Empty) u = PQ.ExtractMin(); foreach(Vertex v in u.Neighbors)if(PQ.Contains(v) && w(u,v) < v.Key)v.Parent = u;PQ.DecreaseKey(v, w(u,v));

  26. Algoritme van Prim Priority Queue B: 4 H: 8

  27. Algoritme van Prim Priority Queue B: 4 C: 8 H: 8

  28. Algoritme van Prim Priority Queue C: 8 I: 2 F: 4 D: 7 H: 8

  29. Algoritme van Prim Priority Queue I: 2 F: 4 G: 6 D: 7 H: 8 H: 7

  30. Algoritme van Prim

  31. Pseudocode van Prim foreach(Vertex v in graph.Vertices) v.Key = ∞; root.Key = 0;PQ = new PriorityQueue(graph.Vertices); O(n) while(!PQ.Empty) O(n) u = PQ.ExtractMin(); O(log n) foreach(Vertex v in u.Neighbors) totaalO(m)if(PQ.Contains(v) && w(u,v) < v.Key)v.Parent = u;PQ.DecreaseKey(v, w(u,v)); O(log n) Looptijd is dus . Het kan nog sneller in met een Fibbonacciheap – die doet decreasekey in .

  32. Pseudocode van Prim Dijkstra foreach(Vertex v in graph.Vertices) v.Key = ∞; root.Key = 0;PQ = new PriorityQueue(graph.Vertices); O(n) while(!PQ.Empty) O(n) u = PQ.ExtractMin(); O(log n) foreach(Vertex v in u.Neighbors) totaalO(m)if(PQ.Contains(v) && w(u,v) + u.Key< v.Key)v.Parent = u;PQ.DecreaseKey(v, w(u,v) + u.Key); O(log n) Looptijd is dus . Het kan nog sneller in met een Fibbonacciheap – die doet decreasekey in .

  33. Bewijs van Prim • We moeten de GCP bewijzen • GCP: Zij een MST van en stel dat . Als een lichtste kant is die een knoop in met een knoop niet in verbindt ( is -verlatend), dan is deelverzameling van een MST . • Als dan is het goed. Stel dus dat . • Dan bevat een cykel. Bekijk de kanten van die cykel. • De cykel bevat naast nog een -verlatende kant . • dus is een minimale(re) spanning tree ()

  34. Algoritme van Kruskal • Prim: laat één boom steeds verder groeien • Kruskal: werkt met een woud met allemaal losse stukjes boom • Iedere verbonden graaf heeft een deelgraaf die boom is: • Herhaald kanten van cykels weglaten • Kan ook andersom: maak een boom door steeds toe te voegen: A = ; foreach(Edge e in graph) if(A ∪ e bevat geen cykel) A = A ∪ {e}; • Het resultaat hangt af van de volgorde!

  35. Algoritme van Kruskal • Bekijk de kanten van licht naar zwaar • Voeg steeds de kant toe als hij geen cykel introduceert • Cykels testen: Union-Find! Sort(edges); foreach(Vertex v) MakeSet(v); foreach(Edge e) if(FindRep(e.A) ≠ FindRep(e.B)) resultaat.Add(e); Union(e.A, e.B);

  36. Algoritme van Kruskal • Bekijk de kanten van licht naar zwaar • Voeg steeds de kant toe als hij geen cykel introduceert • Cykels testen: Union-Find! Sort(edges); foreach(Vertex v) MakeSet(v); foreach(Edge e) if(FindRep(e.A) ≠ FindRep(e.B)) resultaat.Add(e); Union(e.A, e.B); Sort is . unionfind-operaties kosten . Sorteren domineert. Totaal:

  37. Voorbeeld Kruskal HG IC GF AB CF IG CD HI AH BC DE FE

  38. Voorbeeld Kruskal HG: A B C D E F GH I IC GF AB CF IG CD HI AH BC DE FE

  39. Voorbeeld Kruskal HG: A B C D E F GH I IC: A B CI D E F GH GF AB CF IG CD HI AH BC DE FE

  40. Voorbeeld Kruskal HG: A B C D E F GH I IC: A B CI D E F GH GF: A B CI D E FGH AB CF IG CD HI AH BC DE FE

  41. Voorbeeld Kruskal HG: A B C D E F GH I IC: A B CI D E F GH GF: A B CI D E FGH AB: AB CI D E FGH CF IG CD HI AH BC DE FE

  42. Voorbeeld Kruskal HG: A B C D E F GH I IC: A B CI D E F GH GF: A B CI D E FGH AB: AB CI D E FGH CF: AB CFGHI D E IG CD HI AH BC DE FE

  43. Voorbeeld Kruskal HG: A B C D E F GH I IC: A B CI D E F GH GF: A B CI D E FGH AB: AB CI D E FGH CF: AB CFGHI D E IG: niks CD HI AH BC DE FE

  44. Voorbeeld Kruskal HG: A B C D E F GH I IC: A B CI D E F GH GF: A B CI D E FGH AB: AB CI D E FGH CF: AB CFGHI D E IG: niks CD: AB CDFGHI E HI AH BC DE FE

  45. Voorbeeld Kruskal HG: A B C D E F GH I IC: A B CI D E F GH GF: A B CI D E FGH AB: AB CI D E FGH CF: AB CFGHI D E IG: niks CD: AB CDFGHI E HI: niks AH BC DE FE

  46. Voorbeeld Kruskal HG: A B C D E F GH I IC: A B CI D E F GH GF: A B CI D E FGH AB: AB CI D E FGH CF: AB CFGHI D E IG: niks CD: AB CDFGHI E HI: niks AH: ABCDFGHI E BC DE FE

  47. Voorbeeld Kruskal HG: A B C D E F GH I IC: A B CI D E F GH GF: A B CI D E FGH AB: AB CI D E FGH CF: AB CFGHI D E IG: niks CD: AB CDFGHI E HI: niks AH: ABCDFGHI E BC: niks DE FE

  48. Voorbeeld Kruskal HG: A B C D E F GH I IC: A B CI D E F GH GF: A B CI D E FGH AB: AB CI D E FGH CF: AB CFGHI D E IG: niks CD: AB CDFGHI E HI: niks AH: ABCDFGHI E BC: niks DE: ABCDEFGHI FE

  49. Voorbeeld Kruskal HG: A B C D E F GH I IC: A B CI D E F GH GF: A B CI D E FGH AB: AB CI D E FGH CF: AB CFGHI D E IG: niks CD: AB CDFGHI E HI: niks AH: ABCDFGHI E BC: niks DE: ABCDEFGHI FE: niks

  50. Correctheid van Kruskal • Lemma: gegeven MST van graaf . Stel dat . Zij een lichtste kant zodat cykelvrij is (en ). Dan bestaat er MST zodat en . Bovendien geldt dat . • Bewijs: • Als neem • Als bevat een cykel • is cykelvrij dus de cykel bevat kant , • is cykelvrij: en is een boom • is een lichtste kant met die eigenschap dus • Dus is een minimale(re) MST want .

More Related