Minimum Spanning Tree. Wat is MST? • Minimum spanning tree • De meest efficiënte manier vinden...

64
Minimum Spanning Tree

Transcript of Minimum Spanning Tree. Wat is MST? • Minimum spanning tree • De meest efficiënte manier vinden...

Page 1: Minimum Spanning Tree. Wat is MST? • Minimum spanning tree • De meest efficiënte manier vinden om een verbonden netwerk op te bouwen.

Minimum Spanning Tree

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

Wat is MST?

• Minimum spanning tree• De meest efficiënte manier vinden om een verbonden

netwerk op te bouwen

Page 3: 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):

• 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

Page 4: Minimum Spanning Tree. Wat is MST? • Minimum spanning tree • De meest efficiënte manier vinden om een verbonden netwerk op te bouwen.

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…

Page 5: Minimum Spanning Tree. Wat is MST? • Minimum spanning tree • De meest efficiënte manier vinden om een verbonden netwerk op te bouwen.

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

Page 6: Minimum Spanning Tree. Wat is MST? • Minimum spanning tree • De meest efficiënte manier vinden om een verbonden netwerk op te bouwen.

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

Page 7: Minimum Spanning Tree. Wat is MST? • Minimum spanning tree • De meest efficiënte manier vinden om een verbonden netwerk op te bouwen.

Voorbeeld MST

Gewicht:

Page 8: Minimum Spanning Tree. Wat is MST? • Minimum spanning tree • De meest efficiënte manier vinden om een verbonden netwerk op te bouwen.

MST als optimaliseringsprobleem

• Invoer: verbonden, gewogen graaf

• Zoekruimte: alle deelverzamelingen van :

• Toelaatbaarheid: het moet een boom zijn

• Doelfunctie:

Page 9: Minimum Spanning Tree. Wat is MST? • Minimum spanning tree • De meest efficiënte manier vinden om een verbonden netwerk op te bouwen.

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

Page 10: Minimum Spanning Tree. Wat is MST? • Minimum spanning tree • De meest efficiënte manier vinden om een verbonden netwerk op te bouwen.

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 boomAls geen boom zou zijn zou er een deelverzameling

zijn van minder dan kanten die een boom zou zijn ↯

Page 11: Minimum Spanning Tree. Wat is MST? • Minimum spanning tree • De meest efficiënte manier vinden om een verbonden netwerk op te bouwen.

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

Page 12: Minimum Spanning Tree. Wat is MST? • Minimum spanning tree • De meest efficiënte manier vinden om een verbonden netwerk op te bouwen.

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• Optimal Substructure: een optimale oplossing bevat

een optimale deeloplossing• Een MST bestaat uit MST’s verbonden door edge

Page 13: Minimum Spanning Tree. Wat is MST? • Minimum spanning tree • De meest efficiënte manier vinden om een verbonden netwerk op te bouwen.

Hoe bepaal je een MST?

• DP heeft naast OSS ook overlapping subproblems nodig• Het kan wél, maar…

• Het probleem heeft een greedy choice property!

Page 14: Minimum Spanning Tree. Wat is MST? • Minimum spanning tree • De meest efficiënte manier vinden om een verbonden netwerk op te bouwen.

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

Page 15: Minimum Spanning Tree. Wat is MST? • Minimum spanning tree • De meest efficiënte manier vinden om een verbonden netwerk op te bouwen.

Algoritme van Prim

Page 16: Minimum Spanning Tree. Wat is MST? • Minimum spanning tree • De meest efficiënte manier vinden om een verbonden netwerk op te bouwen.

Algoritme van Prim

Page 17: Minimum Spanning Tree. Wat is MST? • Minimum spanning tree • De meest efficiënte manier vinden om een verbonden netwerk op te bouwen.

Algoritme van Prim

Page 18: Minimum Spanning Tree. Wat is MST? • Minimum spanning tree • De meest efficiënte manier vinden om een verbonden netwerk op te bouwen.

Algoritme van Prim

Page 19: Minimum Spanning Tree. Wat is MST? • Minimum spanning tree • De meest efficiënte manier vinden om een verbonden netwerk op te bouwen.

Algoritme van Prim

Page 20: Minimum Spanning Tree. Wat is MST? • Minimum spanning tree • De meest efficiënte manier vinden om een verbonden netwerk op te bouwen.

Algoritme van Prim

Page 21: Minimum Spanning Tree. Wat is MST? • Minimum spanning tree • De meest efficiënte manier vinden om een verbonden netwerk op te bouwen.

Algoritme van Prim

Page 22: Minimum Spanning Tree. Wat is MST? • Minimum spanning tree • De meest efficiënte manier vinden om een verbonden netwerk op te bouwen.

Algoritme van Prim

Page 23: Minimum Spanning Tree. Wat is MST? • Minimum spanning tree • De meest efficiënte manier vinden om een verbonden netwerk op te bouwen.

Algoritme van Prim

Page 24: Minimum Spanning Tree. Wat is MST? • Minimum spanning tree • De meest efficiënte manier vinden om een verbonden netwerk op te bouwen.

Implementatie van Prim

• Hoe kun je snel de lichtste kant vinden? Priority Queue!

• Representatie van het resultaat? Parent Pointers

Page 25: Minimum Spanning Tree. Wat is MST? • Minimum spanning tree • De meest efficiënte manier vinden om een verbonden netwerk op te bouwen.

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));

Page 26: Minimum Spanning Tree. Wat is MST? • Minimum spanning tree • De meest efficiënte manier vinden om een verbonden netwerk op te bouwen.

Algoritme van Prim

Priority QueueB: 4H: 8

Page 27: Minimum Spanning Tree. Wat is MST? • Minimum spanning tree • De meest efficiënte manier vinden om een verbonden netwerk op te bouwen.

Algoritme van Prim

Priority QueueB: 4C: 8H: 8

Page 28: Minimum Spanning Tree. Wat is MST? • Minimum spanning tree • De meest efficiënte manier vinden om een verbonden netwerk op te bouwen.

Algoritme van Prim

Priority QueueC: 8I: 2F: 4D: 7H: 8

Page 29: Minimum Spanning Tree. Wat is MST? • Minimum spanning tree • De meest efficiënte manier vinden om een verbonden netwerk op te bouwen.

Algoritme van Prim

Priority QueueI: 2F: 4G: 6D: 7H: 8 H: 7

Page 30: Minimum Spanning Tree. Wat is MST? • Minimum spanning tree • De meest efficiënte manier vinden om een verbonden netwerk op te bouwen.

Algoritme van Prim

Page 31: Minimum Spanning Tree. Wat is MST? • Minimum spanning tree • De meest efficiënte manier vinden om een verbonden netwerk op te bouwen.

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) totaal

O(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 .

Page 32: Minimum Spanning Tree. Wat is MST? • Minimum spanning tree • De meest efficiënte manier vinden om een verbonden netwerk op te bouwen.

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) totaal

O(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 .

Page 33: Minimum Spanning Tree. Wat is MST? • Minimum spanning tree • De meest efficiënte manier vinden om een verbonden netwerk op te bouwen.

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 ()

Page 34: Minimum Spanning Tree. Wat is MST? • Minimum spanning tree • De meest efficiënte manier vinden om een verbonden netwerk op te bouwen.

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!

Page 35: Minimum Spanning Tree. Wat is MST? • Minimum spanning tree • De meest efficiënte manier vinden om een verbonden netwerk op te bouwen.

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);

Page 36: Minimum Spanning Tree. Wat is MST? • Minimum spanning tree • De meest efficiënte manier vinden om een verbonden netwerk op te bouwen.

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 . union find-operaties kosten .Sorteren domineert. Totaal:

Page 37: Minimum Spanning Tree. Wat is MST? • Minimum spanning tree • De meest efficiënte manier vinden om een verbonden netwerk op te bouwen.

Voorbeeld Kruskal

HGICGFABCFIGCDHIAHBCDEFE

Page 38: Minimum Spanning Tree. Wat is MST? • Minimum spanning tree • De meest efficiënte manier vinden om een verbonden netwerk op te bouwen.

Voorbeeld Kruskal

HG: A B C D E F GH IICGFABCFIGCDHIAHBCDEFE

Page 39: Minimum Spanning Tree. Wat is MST? • Minimum spanning tree • De meest efficiënte manier vinden om een verbonden netwerk op te bouwen.

Voorbeeld Kruskal

HG: A B C D E F GH IIC: A B CI D E F GHGFABCFIGCDHIAHBCDEFE

Page 40: Minimum Spanning Tree. Wat is MST? • Minimum spanning tree • De meest efficiënte manier vinden om een verbonden netwerk op te bouwen.

Voorbeeld Kruskal

HG: A B C D E F GH IIC: A B CI D E F GHGF: A B CI D E FGHABCFIGCDHIAHBCDEFE

Page 41: Minimum Spanning Tree. Wat is MST? • Minimum spanning tree • De meest efficiënte manier vinden om een verbonden netwerk op te bouwen.

Voorbeeld Kruskal

HG: A B C D E F GH IIC: A B CI D E F GHGF: A B CI D E FGHAB: AB CI D E FGHCFIGCDHIAHBCDEFE

Page 42: Minimum Spanning Tree. Wat is MST? • Minimum spanning tree • De meest efficiënte manier vinden om een verbonden netwerk op te bouwen.

Voorbeeld Kruskal

HG: A B C D E F GH IIC: A B CI D E F GHGF: A B CI D E FGHAB: AB CI D E FGHCF: AB CFGHI D EIGCDHIAHBCDEFE

Page 43: Minimum Spanning Tree. Wat is MST? • Minimum spanning tree • De meest efficiënte manier vinden om een verbonden netwerk op te bouwen.

Voorbeeld Kruskal

HG: A B C D E F GH IIC: A B CI D E F GHGF: A B CI D E FGHAB: AB CI D E FGHCF: AB CFGHI D EIG: niksCDHIAHBCDEFE

Page 44: Minimum Spanning Tree. Wat is MST? • Minimum spanning tree • De meest efficiënte manier vinden om een verbonden netwerk op te bouwen.

Voorbeeld Kruskal

HG: A B C D E F GH IIC: A B CI D E F GHGF: A B CI D E FGHAB: AB CI D E FGHCF: AB CFGHI D EIG: niksCD: AB CDFGHI EHIAHBCDEFE

Page 45: Minimum Spanning Tree. Wat is MST? • Minimum spanning tree • De meest efficiënte manier vinden om een verbonden netwerk op te bouwen.

Voorbeeld Kruskal

HG: A B C D E F GH IIC: A B CI D E F GHGF: A B CI D E FGHAB: AB CI D E FGHCF: AB CFGHI D EIG: niksCD: AB CDFGHI EHI: niksAHBCDEFE

Page 46: Minimum Spanning Tree. Wat is MST? • Minimum spanning tree • De meest efficiënte manier vinden om een verbonden netwerk op te bouwen.

Voorbeeld Kruskal

HG: A B C D E F GH IIC: A B CI D E F GHGF: A B CI D E FGHAB: AB CI D E FGHCF: AB CFGHI D EIG: niksCD: AB CDFGHI EHI: niksAH: ABCDFGHI EBCDEFE

Page 47: Minimum Spanning Tree. Wat is MST? • Minimum spanning tree • De meest efficiënte manier vinden om een verbonden netwerk op te bouwen.

Voorbeeld Kruskal

HG: A B C D E F GH IIC: A B CI D E F GHGF: A B CI D E FGHAB: AB CI D E FGHCF: AB CFGHI D EIG: niksCD: AB CDFGHI EHI: niksAH: ABCDFGHI EBC: niksDEFE

Page 48: Minimum Spanning Tree. Wat is MST? • Minimum spanning tree • De meest efficiënte manier vinden om een verbonden netwerk op te bouwen.

Voorbeeld Kruskal

HG: A B C D E F GH IIC: A B CI D E F GHGF: A B CI D E FGHAB: AB CI D E FGHCF: AB CFGHI D EIG: niksCD: AB CDFGHI EHI: niksAH: ABCDFGHI EBC: niksDE: ABCDEFGHIFE

Page 49: Minimum Spanning Tree. Wat is MST? • Minimum spanning tree • De meest efficiënte manier vinden om een verbonden netwerk op te bouwen.

Voorbeeld Kruskal

HG: A B C D E F GH IIC: A B CI D E F GHGF: A B CI D E FGHAB: AB CI D E FGHCF: AB CFGHI D EIG: niksCD: AB CDFGHI EHI: niksAH: ABCDFGHI EBC: niksDE: ABCDEFGHIFE: niks

Page 50: Minimum Spanning Tree. Wat is MST? • Minimum spanning tree • De meest efficiënte manier vinden om een verbonden netwerk op te bouwen.

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 .

Page 51: Minimum Spanning Tree. Wat is MST? • Minimum spanning tree • De meest efficiënte manier vinden om een verbonden netwerk op te bouwen.

Correctheid van Kruskal

• Het lemma is niet genoeg. Bewijs met invariant (soort inductie)

initialisatie:

for(i = 1 to n)invariant: is uit te breiden met t/m tot MSTif( voegt geen cykel toe)

else

• In het begin is de invariant waar ( is een verbonden graaf)

Wil: invariant is nu waar voor

Page 52: Minimum Spanning Tree. Wat is MST? • Minimum spanning tree • De meest efficiënte manier vinden om een verbonden netwerk op te bouwen.

Correctheid van Kruskal

for(i = 1 to n)invariant: is uit te breiden met t/m tot MSTif( voegt geen cykel toe)

else Formeel “er is MST zodat ”• Stel de invariant is waar voor zekere • Dan is er een MST zodat

Page 53: Minimum Spanning Tree. Wat is MST? • Minimum spanning tree • De meest efficiënte manier vinden om een verbonden netwerk op te bouwen.

Correctheid van Kruskal

for(i = 1 to n)invariant: is uit te breiden met t/m tot MSTif( voegt geen cykel toe)

else Formeel “er is MST zodat ”• Stel de invariant is waar voor zekere • Dan is er een MST zodat

– Als het if-statement false is ( bevat een cykel):• is zeker waar want • geldt ook want kan geen element van zijn, is cykelvrij

en bevat en is niet cykelvrij

Page 54: Minimum Spanning Tree. Wat is MST? • Minimum spanning tree • De meest efficiënte manier vinden om een verbonden netwerk op te bouwen.

Correctheid van Kruskal

for(i = 1 to n)invariant: is uit te breiden met t/m tot MSTif( voegt geen cykel toe)

else Formeel “er is MST zodat ”• Stel de invariant is waar voor zekere • Dan is er een MST zodat

– Als het if-statement true is ( is cykelvrij) roepen we het lemma in. Er is een MST met .

Lemma: gegeven MST van graaf . Stel dat . Zij een lichtste kant zodat cykelvrij is (en ). Dan bestaat er MST zodat en . Bovendien geldt dat .

Page 55: Minimum Spanning Tree. Wat is MST? • Minimum spanning tree • De meest efficiënte manier vinden om een verbonden netwerk op te bouwen.

Correctheid van Kruskal

for(i = 1 to n)invariant: is uit te breiden met t/m tot MSTif( voegt geen cykel toe)

else Formeel “er is MST zodat ”• Stel de invariant is waar voor zekere • Dan is er een MST zodat

– Als het if-statement true is ( is cykelvrij) roepen we het lemma in. Er is een MST met .

– dus we hoeven enkel te checken dat – Dat kan:

Page 56: Minimum Spanning Tree. Wat is MST? • Minimum spanning tree • De meest efficiënte manier vinden om een verbonden netwerk op te bouwen.

Correctheid van Kruskal

initialisatie:

for(i = 1 to n)invariant: is uit te breiden met t/m tot MSTif( voegt geen cykel toe)

else

bewezen: invariant is nog steeds waar (na ophogen i)

Zodra de for-loop klaar is dan “is met en+1 t/m en uit te breiden tot MST” dus is een MST.

Page 57: Minimum Spanning Tree. Wat is MST? • Minimum spanning tree • De meest efficiënte manier vinden om een verbonden netwerk op te bouwen.

Is de MST uniek?

• Nee, maar wel als de kantgewichten uniek zijn!

Stel is een ongerichte gewogen graaf en is injectief (verschillende kanten naar verschillende waarden).Stel we hebben MST’s van en ze zijn niet hetzelfde.

Dan zijn er kanten die in precies van zitten.Bekijk de laagste kant die niet in beide zit.Stel z.v.a. dat . Dan bevat een cykel. en bevat géén cykel dus cykelkant zit alleen in .

Page 58: Minimum Spanning Tree. Wat is MST? • Minimum spanning tree • De meest efficiënte manier vinden om een verbonden netwerk op te bouwen.

Is de MST uniek?

• Nee, maar wel als de kantgewichten uniek zijn!

Stel is een ongerichte gewogen graaf en is injectief (verschillende kanten naar verschillende waarden).Stel we hebben MST’s van en ze zijn niet hetzelfde.

Dan zijn er kanten die in precies van zitten.Bekijk de laagste kant die niet in beide zit.Stel z.v.a. dat . Dan bevat een cykel. en bevat géén cykel dus cykelkant zit alleen in .Per constructie dus is een MST met lager gewicht dan . Tegenspraak! en zijn hetzelfde.

Page 59: Minimum Spanning Tree. Wat is MST? • Minimum spanning tree • De meest efficiënte manier vinden om een verbonden netwerk op te bouwen.

Kroegentocht of TSP

• Travelling Salesman

• Bepaal een volgorde (rondtocht) om zo snel mogelijk een aantal knopen te bezoeken in een graaf.

• Handelsreiziger: wil zijn product in een aantal steden verkopen, wat is de kortste route.

• Is een “moeilijk” probleem: NP-compleet

• Waarschijnlijk kost het exponentiële tijd om op te lossen

Page 60: Minimum Spanning Tree. Wat is MST? • Minimum spanning tree • De meest efficiënte manier vinden om een verbonden netwerk op te bouwen.

TSP-Approximatie

• Met behulp van MST kunnen we TSP benaderen

Page 61: Minimum Spanning Tree. Wat is MST? • Minimum spanning tree • De meest efficiënte manier vinden om een verbonden netwerk op te bouwen.

TSP-Approximatie

• Met behulp van MST kunnen we TSP benaderen• TSP is hoogstens zo lang als MST

Page 62: Minimum Spanning Tree. Wat is MST? • Minimum spanning tree • De meest efficiënte manier vinden om een verbonden netwerk op te bouwen.

TSP-Approximatie

• Met behulp van MST kunnen we TSP benaderen• TSP is hoogstens zo lang als MST

• Maar ook: MST is hoogstens zo groot als TSP• Laat kanten weg uit TSP tot je een MST hebt• Ergo: MST TSP MST• MST approximeert TSP

• Werkt alleen als symmetrisch

• Approximatie (begrensd) vs. heuristiek

Page 63: Minimum Spanning Tree. Wat is MST? • Minimum spanning tree • De meest efficiënte manier vinden om een verbonden netwerk op te bouwen.

Prim VS Kruskal

Prim Kruskal

Datastructuur Priority Queue Union-Find

Looptijd of (sorteren)

Extra ruimte

• Prim: breidt 1 boom steeds verder uit (als Dijkstra)• Kruskal: laat boom groeien uit meerdere stukjes

• Ik vind Kruskal beter: makkelijk te implementeren en vaak betere constante in de grote

• Het is een kwestie van smaak

Page 64: Minimum Spanning Tree. Wat is MST? • Minimum spanning tree • De meest efficiënte manier vinden om een verbonden netwerk op te bouwen.

Conclusie

• Minimum Spanning Tree: lichtste, verbonden deelgraaf• Algoritme van Prim of Kruskal• Je kan van alles bewijzen als je een kant toevoegt en de

cykel weer doorbreekt• Lokale eigenschappen greedy algoritme

• Toepassingen van MST:– Lege collegezaal (LAN-party!)– Netwerk-broadcast– Handschriftherkenning– TSP-approximatie (kroegentocht)