TW2020 Optimalisering Hoorcollege 8 Leo van Iersel Technische Universiteit Delft 2 november 2016 Leo van Iersel (TUD) TW2020 Optimalisering 2 november 2016 1 / 28
Minimum Opspannende Boom (Minimum Spanning Tree) Leo van Iersel (TUD) TW2020 Optimalisering 2 november 2016 2 / 28
Definitie Een boom is een samenhangende graaf zonder circuits. Een bos is een verzameling bomen. Leo van Iersel (TUD) TW2020 Optimalisering 2 november 2016 3 / 28
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 2 november 2016 3 / 28
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 2 november 2016 3 / 28
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 2 november 2016 3 / 28
Voorbeeld Een opspannende boom van de Petersen graaf (in zwart): Leo van Iersel (TUD) TW2020 Optimalisering 2 november 2016 4 / 28
Voorbeeld Een andere opspannende boom van de Petersen graaf (in zwart): Leo van Iersel (TUD) TW2020 Optimalisering 2 november 2016 5 / 28
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 2 november 2016 6 / 28
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 2 november 2016 7 / 28
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 e k δ(u k ) met minimale lengte U k+1 := U k e k F k+1 := F k {e k } (V, F V ) is een minimum opspannende boom van G Leo van Iersel (TUD) TW2020 Optimalisering 2 november 2016 7 / 28
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 2 november 2016 8 / 28
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 2 november 2016 9 / 28
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 2 november 2016 10 / 28
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 2 november 2016 10 / 28
Definitie Een bos (V, F ) is een bos van G = (V, E) als F E. Leo van Iersel (TUD) TW2020 Optimalisering 2 november 2016 11 / 28
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 2 november 2016 11 / 28
Algoritme (Prim-Dijkstra) Stelling 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 U k+1 := U k e k F k+1 := F k {e k } Het algoritme van Prim-Dijkstra vindt een minimum opspannende boom en heeft looptijd O( V 2 ). Leo van Iersel (TUD) TW2020 Optimalisering 2 november 2016 12 / 28
Algoritme (Prim-Dijkstra) Stelling 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 U k+1 := U k e k F k+1 := F k {e k } Het algoritme van Prim-Dijkstra vindt een minimum opspannende boom en heeft looptijd O( V 2 ). Houd voor elk punt v V \ U k de lengte f (v) bij van een kortste lijn {u, v} met u U k. Leo van Iersel (TUD) TW2020 Optimalisering 2 november 2016 12 / 28
Algoritme (Prim-Dijkstra) Stelling 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 U k+1 := U k e k F k+1 := F k {e k } Het algoritme van Prim-Dijkstra vindt een minimum opspannende boom en heeft looptijd O( V 2 ). Houd voor elk punt v V \ U k de lengte f (v) bij van een kortste lijn {u, v} met u U k. Een implementatie met Fibonacci Heaps heeft looptijd O( E + V log( V )). Leo van Iersel (TUD) TW2020 Optimalisering 2 november 2016 12 / 28
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 U1,..., 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 2 november 2016 13 / 28
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 Stelling F := while F < V 1 laat U1,..., 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 } Borůvka s algoritme vindt een minimum opspannende boom (V, F ) van G en heeft looptijd O( E log( V )). Leo van Iersel (TUD) TW2020 Optimalisering 2 november 2016 13 / 28
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 2 november 2016 14 / 28
Na één iteratie: 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 2 november 2016 15 / 28
Na twee iteraties: 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 2 november 2016 16 / 28
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 2 november 2016 17 / 28
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 2 november 2016 17 / 28
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 2 november 2016 17 / 28
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 2 november 2016 18 / 28
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 2 november 2016 19 / 28
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 2 november 2016 19 / 28
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 2 november 2016 19 / 28
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 2 november 2016 19 / 28
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 2 november 2016 20 / 28
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 2 november 2016 20 / 28
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 2 november 2016 20 / 28
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 2 november 2016 20 / 28
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 2 november 2016 21 / 28
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. 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 2 november 2016 21 / 28
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. 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 2 november 2016 22 / 28
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 2 november 2016 23 / 28
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 2 november 2016 23 / 28
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 2 november 2016 24 / 28
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 2 november 2016 24 / 28
Definitie Een Prüfer rij is een rij van lengte n 2 bestaande uit getallen uit {1,..., n} Leo van Iersel (TUD) TW2020 Optimalisering 2 november 2016 25 / 28
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 2 november 2016 25 / 28
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 2 november 2016 26 / 28 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 2 november 2016 27 / 28
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 2 november 2016 28 / 28
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 2 november 2016 28 / 28