TW2020 Optimalisering Hoorcollege 8 Leo van Iersel Technische Universiteit Delft 28 oktober 2015 Leo van Iersel (TUD) TW2020 Optimalisering 28 oktober 2015 1 / 25
Definitie Een boom is een samenhangende graaf zonder circuits. Een bos is een verzameling bomen. Leo van Iersel (TUD) TW2020 Optimalisering 28 oktober 2015 2 / 25
Definitie Een boom is een samenhangende graaf zonder circuits. Een bos is een verzameling bomen. Of: een bos is een graaf zonder circuits. Leo van Iersel (TUD) TW2020 Optimalisering 28 oktober 2015 2 / 25
Definitie Een boom is een samenhangende graaf zonder circuits. Definitie Een bos is een verzameling bomen. Of: een bos is een graaf zonder circuits. Laat G = (V, E) een graaf zijn. Een opspannende boom (spanning tree) van G is een boom T = (V, F ) met F E. Leo van Iersel (TUD) TW2020 Optimalisering 28 oktober 2015 2 / 25
Definitie Een boom is een samenhangende graaf zonder circuits. Definitie Een bos is een verzameling bomen. Of: een bos is een graaf zonder circuits. Laat G = (V, E) een graaf zijn. Een opspannende boom (spanning tree) van G is een boom T = (V, F ) met F E. Anders gezegd, een opspannende boom van G is een deelgraaf van G die alle punten van G verbindt en geen circuits bevat. Leo van Iersel (TUD) TW2020 Optimalisering 28 oktober 2015 2 / 25
Voorbeeld Een opspannende boom van de Petersen graaf (in zwart): Leo van Iersel (TUD) TW2020 Optimalisering 28 oktober 2015 3 / 25
Voorbeeld Een andere opspannende boom van de Petersen graaf (in zwart): Leo van Iersel (TUD) TW2020 Optimalisering 28 oktober 2015 4 / 25
Probleem Minimum Opspannende Boom (Minimum Spanning Tree) Gegeven: samenhangende graaf G = (V, E) en lengtefunctie l : E R Vind: een opspannende boom T = (V, F ) van G met minimale lengte l(t ) = l(e) e F Elke samenhangende graaf heeft tenminste één opspannende boom. Toepassing: netwerk ontwerp. Leo van Iersel (TUD) TW2020 Optimalisering 28 oktober 2015 5 / 25
Prim-Dijkstra methode voor het vinden van een minimum opspannende boom van een samenhangende graaf G = (V, E) en lengtefunctie l : E R Definitie δ(u) is de verzameling lijnen die precies één eindpunt in U hebben Leo van Iersel (TUD) TW2020 Optimalisering 28 oktober 2015 6 / 25
Prim-Dijkstra methode voor het vinden van een minimum opspannende boom van een samenhangende graaf G = (V, E) en lengtefunctie l : E R Definitie δ(u) is de verzameling lijnen die precies één eindpunt in U hebben Algoritme Kies willekeurig punt v 1 U 1 := {v 1 } F 1 := Voor k = 1, 2,..., V 1 Kies een lijn ek δ(u k ) met minimale lengte Uk+1 := U k e k Fk+1 := F k {e k } Leo van Iersel (TUD) TW2020 Optimalisering 28 oktober 2015 6 / 25
Prim-Dijkstra methode voor het vinden van een minimum opspannende boom van een samenhangende graaf G = (V, E) en lengtefunctie l : E R Definitie δ(u) is de verzameling lijnen die precies één eindpunt in U hebben Algoritme Kies willekeurig punt v 1 U 1 := {v 1 } F 1 := Voor k = 1, 2,..., V 1 Kies een lijn ek δ(u k ) met minimale lengte Stelling Uk+1 := U k e k Fk+1 := F k {e k } (V, F V ) is een minimum opspannende boom van G Leo van Iersel (TUD) TW2020 Optimalisering 28 oktober 2015 6 / 25
Voorbeeld Vind een minimum opspannende boom in de volgende graaf m.b.v. de Prim-Dijkstra methode: 3 3 2 3 4 2 7 6 3 5 3 4 4 8 4 5 5 1 3 9 6 Leo van Iersel (TUD) TW2020 Optimalisering 28 oktober 2015 7 / 25
Lemma (1) De volgende uitspraken zijn equivalent voor een graaf G = (V, E): 1 G is een boom (is samenhangend en bevat geen circuit) 2 G is samenhangend en E = V 1 3 G bevat geen circuit en E = V 1 4 G bevat een uniek pad tussen elk tweetal punten Leo van Iersel (TUD) TW2020 Optimalisering 28 oktober 2015 8 / 25
Lemma (2) Als G = (V, E) samenhangend is, (V, F ) een opspannende boom van G en e E \ F dan zijn de volgende twee uitspraken waar: 1 (V, F {e}) heeft een uniek circuit C Leo van Iersel (TUD) TW2020 Optimalisering 28 oktober 2015 9 / 25
Lemma (2) Als G = (V, E) samenhangend is, (V, F ) een opspannende boom van G en e E \ F dan zijn de volgende twee uitspraken waar: 1 (V, F {e}) heeft een uniek circuit C 2 voor elke lijn f van C is (V, F \ {f } {e}) ook een opspannende boom van G e Voorbeeld: lijn e toevoegen geeft een uniek circuit; lijn f weglaten geeft weer een opspannende boom. f Leo van Iersel (TUD) TW2020 Optimalisering 28 oktober 2015 9 / 25
Definitie Een bos (V, F ) is een bos van G = (V, E) als F E. Leo van Iersel (TUD) TW2020 Optimalisering 28 oktober 2015 10 / 25
Definitie Een bos (V, F ) is een bos van G = (V, E) als F E. Stelling (12.1) Laat (V, F ) een bos van G = (V, E) zijn, U een samenhangende component van (V, F ) en e δ(u) een lijn met minimale lengte over alle lijnen in δ(u), dan bestaat er een opspannende boom van G die de lijnen in F {e} bevat en die minimaal is over alle opspannende bomen van G die de lijnen in F bevatten. Leo van Iersel (TUD) TW2020 Optimalisering 28 oktober 2015 10 / 25
Definitie Een bos (V, F ) is een bos van G = (V, E) als F E. Stelling (12.1) Laat (V, F ) een bos van G = (V, E) zijn, U een samenhangende component van (V, F ) en e δ(u) een lijn met minimale lengte over alle lijnen in δ(u), dan bestaat er een opspannende boom van G die de lijnen in F {e} bevat en die minimaal is over alle opspannende bomen van G die de lijnen in F bevatten. Stelling Het algoritme van Prim-Dijkstra vindt een minimum opspannende boom. Leo van Iersel (TUD) TW2020 Optimalisering 28 oktober 2015 10 / 25
Stelling Het algoritme van Prim-Dijkstra heeft een looptijd van O( V 2 ). Leo van Iersel (TUD) TW2020 Optimalisering 28 oktober 2015 11 / 25
Stelling Het algoritme van Prim-Dijkstra heeft een looptijd van O( V 2 ). Bewijs Houd voor elk punt v V \ U k de lengte f (v) bij van een kortste lijn {u, v} met u U k. Er zijn V iteraties. In elke iteratie is er O( V ) tijd nodig om een punt v V \ U k met minimale f (v) te vinden. In elke iteratie is er O( V ) tijd nodig om de labels van de buren van dit punt v aan te passen. Leo van Iersel (TUD) TW2020 Optimalisering 28 oktober 2015 11 / 25
Stelling Het algoritme van Prim-Dijkstra heeft een looptijd van O( V 2 ). Bewijs Stelling Houd voor elk punt v V \ U k de lengte f (v) bij van een kortste lijn {u, v} met u U k. Er zijn V iteraties. In elke iteratie is er O( V ) tijd nodig om een punt v V \ U k met minimale f (v) te vinden. In elke iteratie is er O( V ) tijd nodig om de labels van de buren van dit punt v aan te passen. Het algoritme van Prim-Dijkstra geïmplementeerd met Fibonacci Heaps lost het minimum opspannende boom probleem op in tijd O( E + V log( V )). Leo van Iersel (TUD) TW2020 Optimalisering 28 oktober 2015 11 / 25
Borůvka s methode voor het vinden van een minimum opspannende boom van een samenhangende graaf G = (V, E) met lengtefunctie l : E R. Neem voor het gemak aan dat alle lijnen verschillende lengtes hebben. Algoritme F := while F < V 1 laat U 1,..., U k de componenten van (V, F ) zijn for i = 1,..., k kies een lijn e i δ(u i ) van minimum lengte F := F {e1,..., e k } Leo van Iersel (TUD) TW2020 Optimalisering 28 oktober 2015 12 / 25
Borůvka s methode voor het vinden van een minimum opspannende boom van een samenhangende graaf G = (V, E) met lengtefunctie l : E R. Neem voor het gemak aan dat alle lijnen verschillende lengtes hebben. Algoritme F := while F < V 1 laat U 1,..., U k de componenten van (V, F ) zijn for i = 1,..., k kies een lijn e i δ(u i ) van minimum lengte F := F {e1,..., e k } Stelling Borůvka s algoritme vindt een minimum opspannende boom (V, F ) van G. Leo van Iersel (TUD) TW2020 Optimalisering 28 oktober 2015 12 / 25
Borůvka s methode voor het vinden van een minimum opspannende boom van een samenhangende graaf G = (V, E) met lengtefunctie l : E R. Neem voor het gemak aan dat alle lijnen verschillende lengtes hebben. Algoritme F := while F < V 1 laat U 1,..., U k de componenten van (V, F ) zijn for i = 1,..., k kies een lijn e i δ(u i ) van minimum lengte F := F {e1,..., e k } Stelling Borůvka s algoritme vindt een minimum opspannende boom (V, F ) van G. Stelling De looptijd van Borůvka s algoritme is O( E log( V )). Leo van Iersel (TUD) TW2020 Optimalisering 28 oktober 2015 12 / 25
Voorbeeld Vind een minimum opspannende boom in de volgende graaf m.b.v. Borůvka s methode: 27 13 4 12 17 2 7 6 11 5 10 16 31 25 14 19 21 1 3 9 20 Leo van Iersel (TUD) TW2020 Optimalisering 28 oktober 2015 13 / 25
Kruskals methode voor het vinden van een minimum opspannende boom van een samenhangende graaf G = (V, E) met lengtefunctie l : E R. Algoritme F := for k = 1, 2,..., V 1 Kies een lijn e k E \ F met minimale lengte waarvoor (V, F {e k }) een bos is F := F {ek } Leo van Iersel (TUD) TW2020 Optimalisering 28 oktober 2015 14 / 25
Kruskals methode voor het vinden van een minimum opspannende boom van een samenhangende graaf G = (V, E) met lengtefunctie l : E R. Algoritme Stelling F := for k = 1, 2,..., V 1 Kies een lijn e k E \ F met minimale lengte waarvoor (V, F {e k }) een bos is F := F {ek } Kruskals algoritme vindt een minimum opspannende boom (V, F ) van G. Leo van Iersel (TUD) TW2020 Optimalisering 28 oktober 2015 14 / 25
Kruskals methode voor het vinden van een minimum opspannende boom van een samenhangende graaf G = (V, E) met lengtefunctie l : E R. Algoritme Stelling F := for k = 1, 2,..., V 1 Kies een lijn e k E \ F met minimale lengte waarvoor (V, F {e k }) een bos is F := F {ek } Kruskals algoritme vindt een minimum opspannende boom (V, F ) van G. Stelling Kruskals algoritme kan geïmplementeerd worden zodat de looptijd O( E log( V )) is. Leo van Iersel (TUD) TW2020 Optimalisering 28 oktober 2015 14 / 25
Voorbeeld Vind een minimum opspannende boom in de volgende graaf m.b.v. Kruskals algoritme: 3 3 2 3 4 2 7 6 3 5 3 4 4 8 4 5 5 1 3 9 6 Leo van Iersel (TUD) TW2020 Optimalisering 28 oktober 2015 15 / 25
Probleem Maximum Gewicht Bos (Maximum Weight Forest) Gegeven: graaf G = (V, E) en gewichtsfunctie w : E R + Vind: een bos B = (V, F ) van G met maximum gewicht w(e) e F Leo van Iersel (TUD) TW2020 Optimalisering 28 oktober 2015 16 / 25
Probleem Maximum Gewicht Bos (Maximum Weight Forest) Gegeven: graaf G = (V, E) en gewichtsfunctie w : E R + Vind: een bos B = (V, F ) van G met maximum gewicht w(e) e F Definieer een lengtefunctie l : E R + met l(e) = W w(e) waar W = max e E w(e). Leo van Iersel (TUD) TW2020 Optimalisering 28 oktober 2015 16 / 25
Probleem Maximum Gewicht Bos (Maximum Weight Forest) Gegeven: graaf G = (V, E) en gewichtsfunctie w : E R + Vind: een bos B = (V, F ) van G met maximum gewicht w(e) e F Definieer een lengtefunctie l : E R + met l(e) = W w(e) waar W = max e E w(e). Voor een samenhangende graaf G = (V, E) is (V, F ) een maximum gewicht bos m.b.t. w dan en slechts dan als (V, F ) een minimum opspannende boom is m.b.t. l. Leo van Iersel (TUD) TW2020 Optimalisering 28 oktober 2015 16 / 25
Probleem Maximum Gewicht Bos (Maximum Weight Forest) Gegeven: graaf G = (V, E) en gewichtsfunctie w : E R + Vind: een bos B = (V, F ) van G met maximum gewicht w(e) e F Definieer een lengtefunctie l : E R + met l(e) = W w(e) waar W = max e E w(e). Voor een samenhangende graaf G = (V, E) is (V, F ) een maximum gewicht bos m.b.t. w dan en slechts dan als (V, F ) een minimum opspannende boom is m.b.t. l. Voor een niet-samenhangende graaf G = (V, E) vormen de minimum opspannende bomen van de samenhangende componenten van G m.b.t. l een maximum gewicht bos m.b.t. w. Leo van Iersel (TUD) TW2020 Optimalisering 28 oktober 2015 16 / 25
Kruskals methode voor het vinden van een maximum gewicht bos van een graaf G = (V, E) met gewichtsfunctie w : E R. Algoritme F := while er een lijn bestaat die aan F toegevoegd kan worden zonder een circuit te creëren Vind zo n lijn van maximum gewicht en voeg die lijn toe aan F Leo van Iersel (TUD) TW2020 Optimalisering 28 oktober 2015 17 / 25
Kruskals methode voor het vinden van een maximum gewicht bos van een graaf G = (V, E) met gewichtsfunctie w : E R. Algoritme F := while er een lijn bestaat die aan F toegevoegd kan worden zonder een circuit te creëren Vind zo n lijn van maximum gewicht en voeg die lijn toe aan F Kruskals algoritme is een voorbeeld van een greedy algoritme: het maakt in elke iteratie de keuze die direkt het meeste profijt oplevert. Leo van Iersel (TUD) TW2020 Optimalisering 28 oktober 2015 17 / 25
Kruskals methode voor het vinden van een maximum gewicht bos van een graaf G = (V, E) met gewichtsfunctie w : E R. Algoritme F := while er een lijn bestaat die aan F toegevoegd kan worden zonder een circuit te creëren Vind zo n lijn van maximum gewicht en voeg die lijn toe aan F Kruskals algoritme is een voorbeeld van een greedy algoritme: het maakt in elke iteratie de keuze die direkt het meeste profijt oplevert. Het Maximum Gewicht Bos probleem is een voorbeeld van een matroïde probleem. Leo van Iersel (TUD) TW2020 Optimalisering 28 oktober 2015 17 / 25
Kruskals methode voor het vinden van een maximum gewicht bos van een graaf G = (V, E) met gewichtsfunctie w : E R. Algoritme F := while er een lijn bestaat die aan F toegevoegd kan worden zonder een circuit te creëren Vind zo n lijn van maximum gewicht en voeg die lijn toe aan F Kruskals algoritme is een voorbeeld van een greedy algoritme: het maakt in elke iteratie de keuze die direkt het meeste profijt oplevert. Het Maximum Gewicht Bos probleem is een voorbeeld van een matroïde probleem. Alle matroïde problemen kunnen opgelost worden met een greedy algoritme. Leo van Iersel (TUD) TW2020 Optimalisering 28 oktober 2015 17 / 25
Een matroïde bestaat uit een eindige verzameling E en een verzameling I van deelverzamelingen van E die independent sets worden genoemd. Definitie Een matroïde (matroid) is een paar (E, I) met E een eindige verzameling en I een verzameling van deelverzamelingen van E, zodanig dat: (i) Als A I en B A dan is B I. (ii) Als A, B I en A < B dan is er een element e E zodanig dat A {e} I. Leo van Iersel (TUD) TW2020 Optimalisering 28 oktober 2015 18 / 25
Voorbeeld Als G = (V, E) een graaf is en I = {F E (V, F ) bevat geen circuit} dan is (E, I) een matroïde (een graphic matroid). Leo van Iersel (TUD) TW2020 Optimalisering 28 oktober 2015 19 / 25
Voorbeeld Als G = (V, E) een graaf is en I = {F E (V, F ) bevat geen circuit} dan is (E, I) een matroïde (een graphic matroid). Voorbeeld Als A een m n matrix is met: S de verzameling van kolommen van A; F = {F S de kolommen in F zijn lineair onafhankelijk} dan is (S, F) een matroïde (een matric matroid). Leo van Iersel (TUD) TW2020 Optimalisering 28 oktober 2015 19 / 25
Elke matroïde (E, I) heeft een bijbehorend probleem: gegeven een gewichtsfunctie w : E R, vind een independent set van maximum gewicht. Leo van Iersel (TUD) TW2020 Optimalisering 28 oktober 2015 20 / 25
Elke matroïde (E, I) heeft een bijbehorend probleem: gegeven een gewichtsfunctie w : E R, vind een independent set van maximum gewicht. Deze problemen kunnen allemaal opgelost worden met het greedy algoritme. Algoritme F := while E Kies e E met maximum gewicht w(e) Verwijder e uit E. if F {e} I Voeg e toe aan F Uitvoer: F De uitvoer F is een independent set van maximum gewicht. Leo van Iersel (TUD) TW2020 Optimalisering 28 oktober 2015 20 / 25
Vraag Hoeveel opspannende bomen heeft een volledige graaf met n punten? Stelling (Formule van Cayley) Het aantal verschillende bomen met n gelabelde punten is n n 2. Leo van Iersel (TUD) TW2020 Optimalisering 28 oktober 2015 21 / 25
Vraag Hoeveel opspannende bomen heeft een volledige graaf met n punten? Stelling (Formule van Cayley) Het aantal verschillende bomen met n gelabelde punten is n n 2. Leo 2 2 van Iersel (TUD) TW2020 Optimalisering 3 2 28 oktober 2015 21 / 25
Definitie Een Prüfer rij is een rij van lengte n 2 bestaande uit getallen uit {1,..., n} Leo van Iersel (TUD) TW2020 Optimalisering 28 oktober 2015 22 / 25
Definitie Een Prüfer rij is een rij van lengte n 2 bestaande uit getallen uit {1,..., n} Gegeven een gelabelde boom T, kun je als volgt een unieke Prüfer rij bepalen: Laat 1, 2,..., n de labels van de punten van T zijn. Een blad is een punt met graad één. Algoritme Vind het blad b met kleinste label; voeg de buur van b toe aan de Prüfer rij; verwijder b uit de boom; herhaal de voorgaande stappen totdat er twee punten over zijn. Leo van Iersel (TUD) TW2020 Optimalisering 28 oktober 2015 22 / 25
Algoritme Vind het blad b met kleinste label; voeg de buur van b toe aan de Prüfer rij; verwijder b uit de boom; herhaal de voorgaande stappen totdat er twee punten over zijn. Voorbeeld Vind de Prüfer rij van de onderstaande boom. 8 1 2 3 4 5 6 Leo van Iersel (TUD) TW2020 Optimalisering 28 oktober 2015 23 / 25 7
Algoritme Vind het blad b met kleinste label; voeg de buur van b toe aan de Prüfer rij; verwijder b uit de boom; herhaal de voorgaande stappen totdat er twee punten over zijn. Voorbeeld Vind de Prüfer rij van de onderstaande boom. 8 1 2 3 4 5 6 Leo van Iersel (TUD) TW2020 Optimalisering 28 oktober 2015 23 / 25 7
Gegeven een Prüfer rij a = (a 1, a 2,..., a n 2 ), kun je als volgt een unieke gelabelde boom bepalen: Algoritme L := (1, 2,..., n) Creëer punten met labels 1, 2,..., n Herhaal de volgende stappen totdat L = 2 Laat l het eerste label in L zijn dat niet in a voor komt Laat a1 het eerste element van a zijn Verbind het punt met label l met het punt met label a1 Verwijder l uit L en a1 uit a Laat L = {l 1, l 2 } Verbind het punt met label l 1 met het punt met label l 2 Leo van Iersel (TUD) TW2020 Optimalisering 28 oktober 2015 24 / 25
Stelling Er is een bijectie tussen bomen met puntlabels 1,..., n en Prüfer rijen van lengte n 2. Leo van Iersel (TUD) TW2020 Optimalisering 28 oktober 2015 25 / 25
Stelling Er is een bijectie tussen bomen met puntlabels 1,..., n en Prüfer rijen van lengte n 2. Stelling (Formule van Cayley) Het aantal verschillende bomen met n gelabelde punten is n n 2. Dus een volledige graaf heeft n n 2 opspannende bomen. Leo van Iersel (TUD) TW2020 Optimalisering 28 oktober 2015 25 / 25