TW2020 Optimalisering Hoorcollege 7 Leo van Iersel Technische Universiteit Delft 26 oktober 2016 Leo van Iersel (TUD) TW2020 Optimalisering 26 oktober 2016 1 / 28
Deze week: analyseren van algoritmes Hoe meten we de performance van algoritmes? Waar ligt de grens tussen een goed en een slecht algoritme? Leo van Iersel (TUD) TW2020 Optimalisering 26 oktober 2016 2 / 28
Problemen Een (algoritmisch) probleem bestaat uit karakterisaties van toegelaten invoer (input) en gewenste uitvoer (output) als functie van de invoer. Een instantie ontstaat als één toegelaten invoer gekozen wordt. Leo van Iersel (TUD) TW2020 Optimalisering 26 oktober 2016 3 / 28
Problemen Een (algoritmisch) probleem bestaat uit karakterisaties van toegelaten invoer (input) en gewenste uitvoer (output) als functie van de invoer. Een instantie ontstaat als één toegelaten invoer gekozen wordt. Voorbeeld Probleem: Travelling Salesman Problem (TSP) Gegeven: een volledige graaf G = (V, E) en een kostenfunctie c : E R +. Gevraagd: een circuit in G dat elk punt precies één keer bevat en minimale kosten heeft. TSP is een optimaliseringsprobleem. Leo van Iersel (TUD) TW2020 Optimalisering 26 oktober 2016 3 / 28
Een beslissingsprobleem vraagt om een ja- of nee-antwoord. Elk optimaliseringsprobleem heeft een bijbehorend beslissingsprobleem. Voorbeeld Probleem: TSP-beslis Gegeven: een volledige graaf G = (V, E), een kostenfunctie c : E R + en een bovengrens B R. Gevraagd: is er een circuit in G dat elk punt precies één keer bevat en waarvan de kosten maximaal B zijn? Leo van Iersel (TUD) TW2020 Optimalisering 26 oktober 2016 4 / 28
Definitie Een algoritme (algorithm) voor een probleem is een reeks van instructies waarmee elke mogelijke instantie van het probleem opgelost kan worden in eindige tijd. Leo van Iersel (TUD) TW2020 Optimalisering 26 oktober 2016 5 / 28
Definitie Een algoritme (algorithm) voor een probleem is een reeks van instructies waarmee elke mogelijke instantie van het probleem opgelost kan worden in eindige tijd. Definitie De (tijds)complexiteit (time complexity) of looptijd (running time) van een algoritme A is de functie f : N N met f (n) het aantal elementaire stappen dat A in het ergste geval ( worst-case ) nodig heeft om een instantie met invoerlengte n op te lossen. Leo van Iersel (TUD) TW2020 Optimalisering 26 oktober 2016 5 / 28
Definitie Een algoritme (algorithm) voor een probleem is een reeks van instructies waarmee elke mogelijke instantie van het probleem opgelost kan worden in eindige tijd. Definitie De (tijds)complexiteit (time complexity) of looptijd (running time) van een algoritme A is de functie f : N N met f (n) het aantal elementaire stappen dat A in het ergste geval ( worst-case ) nodig heeft om een instantie met invoerlengte n op te lossen. de invoerlengte van een instantie is het aantal bits dat nodig is om de invoer van de instantie te representeren; elementaire stappen zijn o.a. rekenkundige bewerkingen van getallen (optellen, vermenigvuldigen, enz.), vergelijken van getallen, lezen en schrijven van een geheugenplaats, volgen van pointer. Leo van Iersel (TUD) TW2020 Optimalisering 26 oktober 2016 5 / 28
Om complexiteit (of andere functies) af te schatten wordt vaak de volgende big-o notatie gebruikt: Definitie Laten f en g twee functies van N naar R + zijn, dan is f (n) = O(g(n)) als er c > 0 en n 0 N bestaan zodanig dat f (n) c g(n) voor alle n n 0 Leo van Iersel (TUD) TW2020 Optimalisering 26 oktober 2016 6 / 28
Om complexiteit (of andere functies) af te schatten wordt vaak de volgende big-o notatie gebruikt: Definitie Laten f en g twee functies van N naar R + zijn, dan is f (n) = O(g(n)) als er c > 0 en n 0 N bestaan zodanig dat f (n) c g(n) voor alle n n 0 f (n) = Ω(g(n)) als als er c > 0 en n 0 N bestaan zodanig dat f (n) c g(n) voor alle n n 0 Leo van Iersel (TUD) TW2020 Optimalisering 26 oktober 2016 6 / 28
Om complexiteit (of andere functies) af te schatten wordt vaak de volgende big-o notatie gebruikt: Definitie Laten f en g twee functies van N naar R + zijn, dan is f (n) = O(g(n)) als er c > 0 en n 0 N bestaan zodanig dat f (n) c g(n) voor alle n n 0 f (n) = Ω(g(n)) als als er c > 0 en n 0 N bestaan zodanig dat f (n) c g(n) voor alle n n 0 f (n) = Θ(g(n)) als f (n) = O(g(n)) en f (n) = Ω(g(n)) Leo van Iersel (TUD) TW2020 Optimalisering 26 oktober 2016 6 / 28
Om complexiteit (of andere functies) af te schatten wordt vaak de volgende big-o notatie gebruikt: Definitie Laten f en g twee functies van N naar R + zijn, dan is f (n) = O(g(n)) als er c > 0 en n 0 N bestaan zodanig dat f (n) c g(n) voor alle n n 0 f (n) = Ω(g(n)) als als er c > 0 en n 0 N bestaan zodanig dat f (n) c g(n) voor alle n n 0 f (n) = Θ(g(n)) als f (n) = O(g(n)) en f (n) = Ω(g(n)) Nuttige eigenschappen: f (n) als lim n g(n) = 0 dan f (n) = O(g(n)) f (n) als lim n g(n) = c > 0 dan f (n) = Θ(g(n)) f (n) als lim n g(n) = dan f (n) = Ω(g(n)) Leo van Iersel (TUD) TW2020 Optimalisering 26 oktober 2016 6 / 28
Vraag (1) Wat is de invoerlengte als de invoer een getal n is? Leo van Iersel (TUD) TW2020 Optimalisering 26 oktober 2016 7 / 28
Vraag (1) Wat is de invoerlengte als de invoer een getal n is? Vraag (2) Wat is de invoerlengte van een LP? Leo van Iersel (TUD) TW2020 Optimalisering 26 oktober 2016 7 / 28
Vraag (1) Wat is de invoerlengte als de invoer een getal n is? Vraag (2) Wat is de invoerlengte van een LP? Vraag (3) Wat is de invoerlengte als de invoer een graaf is? Leo van Iersel (TUD) TW2020 Optimalisering 26 oktober 2016 7 / 28
Representaties van een ongerichte graaf: 2 1 2 1 3 4 5 3 4 Adjacency matrix: 0 1 2 3 4 1 0 1 0 1 2 1 0 1 1 3 0 1 0 1 4 1 1 1 0 Leo van Iersel (TUD) TW2020 Optimalisering 26 oktober 2016 8 / 28
Representaties van een ongerichte graaf: 2 1 1 2 4 3 4 5 Adjacency matrix: 0 1 2 3 4 1 0 1 0 1 2 1 0 1 1 3 0 1 0 1 4 1 1 1 0 3 Incidence matrix: 0 1 2 3 4 5 1 1 0 0 1 0 2 1 1 1 0 0 3 0 1 0 0 1 4 0 0 1 1 1 Leo van Iersel (TUD) TW2020 Optimalisering 26 oktober 2016 8 / 28
Representaties van een ongerichte graaf: 2 1 1 2 4 3 4 5 Adjacency matrix: 0 1 2 3 4 1 0 1 0 1 2 1 0 1 1 3 0 1 0 1 4 1 1 1 0 3 Incidence matrix: 0 1 2 3 4 5 1 1 0 0 1 0 2 1 1 1 0 0 3 0 1 0 0 1 4 0 0 1 1 1 Adjacency lists: A 1 = [2, 4] A 3 = [2, 4] A 2 = [1, 3, 4] A 4 = [1, 2, 3] Leo van Iersel (TUD) TW2020 Optimalisering 26 oktober 2016 8 / 28
Representatie van een gerichte graaf: 2 1 2 1 3 4 5 3 4 Adjacency matrix: 0 1 2 3 4 1 0 1 0 1 2 0 0 1 0 3 0 0 0 1 4 0 1 0 0 Leo van Iersel (TUD) TW2020 Optimalisering 26 oktober 2016 9 / 28
Representatie van een gerichte graaf: 2 1 1 2 4 3 4 5 Adjacency matrix: 0 1 2 3 4 1 0 1 0 1 2 0 0 1 0 3 0 0 0 1 4 0 1 0 0 3 Incidence matrix: 1 2 3 4 5 1 1 0 0 1 0 2 1 1 1 0 0 3 0 1 0 0 1 4 0 0 1 1 1 Leo van Iersel (TUD) TW2020 Optimalisering 26 oktober 2016 9 / 28
Representatie van een gerichte graaf: 2 1 1 2 4 3 4 5 Adjacency matrix: 0 1 2 3 4 1 0 1 0 1 2 0 0 1 0 3 0 0 0 1 4 0 1 0 0 3 Incidence matrix: 1 2 3 4 5 1 1 0 0 1 0 2 1 1 1 0 0 3 0 1 0 0 1 4 0 0 1 1 1 In- ad out-lists: A in 1 = [] Aout 1 = [2, 4] A in 2 = [1, 4] Aout 2 = [3] A in 3 = [2] Aout 3 = [4] A in 4 = [1, 3] Aout 4 = [2] Leo van Iersel (TUD) TW2020 Optimalisering 26 oktober 2016 9 / 28
Definitie Een algoritme is polynomiaal als het tijdscomplexiteit O(p(n)) heeft met p(n) een polynoom. Leo van Iersel (TUD) TW2020 Optimalisering 26 oktober 2016 10 / 28
Definitie Een algoritme is polynomiaal als het tijdscomplexiteit O(p(n)) heeft met p(n) een polynoom. Definitie Een algoritme is exponentieel als het tijdscomplexiteit Ω(f (n)) heeft met f (n) een exponentiële functie (f (n) = a n voor een constante a > 1). Leo van Iersel (TUD) TW2020 Optimalisering 26 oktober 2016 10 / 28
Definitie Een algoritme is polynomiaal als het tijdscomplexiteit O(p(n)) heeft met p(n) een polynoom. Definitie Een algoritme is exponentieel als het tijdscomplexiteit Ω(f (n)) heeft met f (n) een exponentiële functie (f (n) = a n voor een constante a > 1). Definitie De klasse P is de klasse van alle (beslissings)problemen waarvoor een polynomiaal algoritme bestaat. Problemen in P worden makkelijke problemen genoemd. Leo van Iersel (TUD) TW2020 Optimalisering 26 oktober 2016 10 / 28
Definitie De klasse N P is de klasse van alle beslissingsproblemen waarvoor een ja-antwoord in polynomiale-tijd geverifiëerd kan worden, m.b.v. een certificaat van polynomiale lengte. Leo van Iersel (TUD) TW2020 Optimalisering 26 oktober 2016 11 / 28
Definitie De klasse N P is de klasse van alle beslissingsproblemen waarvoor een ja-antwoord in polynomiale-tijd geverifiëerd kan worden, m.b.v. een certificaat van polynomiale lengte. Voorbeeld TSP-beslis N P. Leo van Iersel (TUD) TW2020 Optimalisering 26 oktober 2016 11 / 28
Definitie De klasse N P is de klasse van alle beslissingsproblemen waarvoor een ja-antwoord in polynomiale-tijd geverifiëerd kan worden, m.b.v. een certificaat van polynomiale lengte. Voorbeeld TSP-beslis N P. Eén van de zeven millennium problemen ($1.000.000): is P = N P? Leo van Iersel (TUD) TW2020 Optimalisering 26 oktober 2016 11 / 28
Definitie De klasse N P is de klasse van alle beslissingsproblemen waarvoor een ja-antwoord in polynomiale-tijd geverifiëerd kan worden, m.b.v. een certificaat van polynomiale lengte. Voorbeeld TSP-beslis N P. Eén van de zeven millennium problemen ($1.000.000): is P = N P? Voor TSP bestaat geen polynomiaal algoritme tenzij P = N P. TSP wordt daarom een moeilijk probleem genoemd. Leo van Iersel (TUD) TW2020 Optimalisering 26 oktober 2016 11 / 28
Schaalbaarheid Polynomiale algoritmes schalen veel beter dan exponentiële algoritmes. Tabel: Groei van polynomiale en exponeniële functies n 10 100 1000 n log(n) 33 664 9966 n 3 1000 1,000,000 10 9 10 6 n 8 10 14 10 22 10 30 2 n 1024 1.27x10 30 1.05x10 301 n log(n) 2099 1.93x10 13 7.89x10 29 n! 3,628,800 10 158 4x10 2567 Leo van Iersel (TUD) TW2020 Optimalisering 26 oktober 2016 12 / 28
Profijt van technologische ontwikkeling Polynomiale algoritmes profiteren meer van technologische ontwikkelingen. Tabel: Maximale instantiegrootte op te lossen in 1 dag Functie Huidige technologie 10x snellere computer n 10 12 10 13 n log(n) 0.948x10 11 0.87x10 12 n 2 10 6 3.16x10 6 n 3 10 4 2.15x10 4 10 8 n 4 10 18 2 n 40 43 10 n 12 13 n log(n) 79 95 n! 14 15 Leo van Iersel (TUD) TW2020 Optimalisering 26 oktober 2016 13 / 28
Voorbeeld Wat is de complexiteit van het algoritme van Dijkstra voor het vinden van een kortste pad van s naar t in een gerichte graaf D = (V, A) met een lengte c uv 0 voor elke pijl (u, v) A en met s, t V. Algoritme W := {s} ρ(s) := 0 ρ(v) := c sv voor elk punt v V \ {s} (met c sv = wanneer (s, v) / A) Herhaal totdat W = V : 1 Vind u V \ W met minimale ρ(u) 2 W := W {u} 3 Voor elke v V \ W met (u, v) A ρ(v) := min{ρ(v), ρ(u) + cuv } Leo van Iersel (TUD) TW2020 Optimalisering 26 oktober 2016 14 / 28
Voorbeeld Wat is de complexiteit van het algoritme van Ford-Fulkerson voor het vinden van een maximum stroom, als alle capaciteiten geheeltallig zijn? Leo van Iersel (TUD) TW2020 Optimalisering 26 oktober 2016 15 / 28
Algoritme (Ford-Fulkerson) 1 Begin met f ij = 0 voor alle (i, j) A 2 Maak een gerichte hulpgraaf D f met dezelfde punten als D en voor elke pijl (i, j) van D: als f ij < b ij dan krijgt D f een pijl (i, j) met capaciteit c ij = b ij f ij als f ij > 0 dan krijgt D f een pijl (j, i) met capaciteit c ji = f ij 3 Geval 1: er bestaat een gericht pad P van s naar t in D f. α := min{c ij (i, j) ligt op P} Vermeerder stroom f als volgt: f ij := f ij + α f ij := f ij α Ga naar (2). als (i, j) op P ligt als (j, i) op P ligt 4 Geval 2: er bestaat geen pad van s naar t in D f. Definieer: U := {u V er bestaat een pad van s naar u in D f } Dan is (U, V \ U) een s-t snede met C(U, V \ U) =waarde(f ). Leo van Iersel (TUD) TW2020 Optimalisering 26 oktober 2016 16 / 28
Voorbeeld Het aantal iteraties van het algoritme van Ford-Fulkerson kan exponentiëel zijn in de invoergrootte. u 1000 1000 s 1000 v 1 1000 t Leo van Iersel (TUD) TW2020 Optimalisering 26 oktober 2016 17 / 28
Voorbeeld Het aantal iteraties van het algoritme van Ford-Fulkerson kan exponentiëel zijn in de invoergrootte. Eerste iteratie: vermeerder stroom over pad (s, u, v, t): u 1/1000 0/1000 s 1/1 t Dit geeft een stroom met waarde 1. 0/1000 1/1000 v Leo van Iersel (TUD) TW2020 Optimalisering 26 oktober 2016 18 / 28
Voorbeeld Het aantal iteraties van het algoritme van Ford-Fulkerson kan exponentiëel zijn in de invoergrootte. Tweede iteratie: vermeerder stroom over pad (s, v, u, t): u 1/1000 1/1000 s 0/1 t Dit geeft een stroom met waarde 2. 1/1000 1/1000 v Leo van Iersel (TUD) TW2020 Optimalisering 26 oktober 2016 19 / 28
Voorbeeld Het aantal iteraties van het algoritme van Ford-Fulkerson kan exponentiëel zijn in de invoergrootte. Derde iteratie: vermeerder stroom over pad (s, u, v, t): u 2/1000 1/1000 s 1/1 t Dit geeft een stroom met waarde 3. 1/1000 2/1000 v Leo van Iersel (TUD) TW2020 Optimalisering 26 oktober 2016 20 / 28
Voorbeeld Het aantal iteraties van het algoritme van Ford-Fulkerson kan exponentiëel zijn in de invoergrootte. Vierde iteratie: vermeerder stroom over pad (s, v, u, t): u 2/1000 2/1000 s 0/1 t Dit geeft een stroom met waarde 4. 2/1000 2/1000 v Leo van Iersel (TUD) TW2020 Optimalisering 26 oktober 2016 21 / 28
Voorbeeld Het aantal iteraties van het algoritme van Ford-Fulkerson kan exponentiëel zijn in de invoergrootte. Vijfde iteratie: vermeerder stroom over pad (s, u, v, t): u 3/1000 2/1000 s 1/1 t Dit geeft een stroom met waarde 5. 2/1000 3/1000 v Leo van Iersel (TUD) TW2020 Optimalisering 26 oktober 2016 22 / 28
Voorbeeld Het aantal iteraties van het algoritme van Ford-Fulkerson kan exponentiëel zijn in de invoergrootte. Na 2000 iteraties: 1000/1000 1000/1000 u s 0/1 t 1000/1000 1000/1000 v Krijgen we eindelijk een optimale stroom met waarde 2000. Leo van Iersel (TUD) TW2020 Optimalisering 26 oktober 2016 23 / 28
Als we 1000 vervangen door N dan hebben we 2N iteraties nodig en is de invoergrootte O(log(N)). Maar N is exponentieel veel groter dan log(n). Dus is het algoritme van Ford-Fulkerson is niet polynomiaal. Vraag Hoe kunnen we het algoritme verbeteren? Leo van Iersel (TUD) TW2020 Optimalisering 26 oktober 2016 24 / 28
Stelling (Dinits en Edmonds-Karp) Het Ford-Fulkerson algoritme heeft polynomiale looptijd als elke iteratie een kortste stroomvermeerderende pad gekozen wordt. Leo van Iersel (TUD) TW2020 Optimalisering 26 oktober 2016 25 / 28
Stelling (Dinits en Edmonds-Karp) Het Ford-Fulkerson algoritme heeft polynomiale looptijd als elke iteratie een kortste stroomvermeerderende pad gekozen wordt. µ(d) := lengte kortste s-t-pad in gerichte graaf D α(d) := verzameling van pijlen die op minstens één kortste s-t-pad liggen α(d) := {(v, u) (u, v) α(d)} Leo van Iersel (TUD) TW2020 Optimalisering 26 oktober 2016 25 / 28
Stelling (Dinits en Edmonds-Karp) Het Ford-Fulkerson algoritme heeft polynomiale looptijd als elke iteratie een kortste stroomvermeerderende pad gekozen wordt. Lemma µ(d) := lengte kortste s-t-pad in gerichte graaf D α(d) := verzameling van pijlen die op minstens één kortste s-t-pad liggen α(d) := {(v, u) (u, v) α(d)} Als D = (V, A) en D = (V, A α(d)) dan is µ(d) = µ(d ) en α(d) = α(d ). Leo van Iersel (TUD) TW2020 Optimalisering 26 oktober 2016 25 / 28
Simplex algoritme Aantal iteraties kan exponentieel zijn. Minimale voorwaarden voor voorbeeld: Exponentieel aantal hoekpunten. Serie van exponentieel veel hoekpunten met toenemende doelstellingswaarde. Leo van Iersel (TUD) TW2020 Optimalisering 26 oktober 2016 26 / 28
Simplex algoritme Aantal iteraties kan exponentieel zijn. Minimale voorwaarden voor voorbeeld: Exponentieel aantal hoekpunten. Serie van exponentieel veel hoekpunten met toenemende doelstellingswaarde. Opm: Een d-dimensionale kubus heeft 2d facetten en 2 d hoekpunten Leo van Iersel (TUD) TW2020 Optimalisering 26 oktober 2016 26 / 28
Leo van Iersel (TUD) TW2020 Optimalisering 26 oktober 2016 27 / 28
De Simplex methode is niet polynomiaal (in de worst case). Voor vrijwel alle praktische instanties is het algoritme heel snel. Algoritmes voor LP: Simplex algoritme (1947): niet polynomiaal, snel in praktijk Ellipsoid method (1979): wel polynomiaal, langzaam in praktijk Interior Point Method (1984): wel polynomiaal, snel in praktijk Open vragen: Is er een pivotregel voor de Simplex methode die wel leidt tot een polynomiaal algoritme? Hoe kunnen we het verschil tussen de theoretische en praktische efficiëntie van algoritmes als de Simplex methode verklaren? Wat zijn goede alternatieven voor de worst-case analyse van algoritmes? Leo van Iersel (TUD) TW2020 Optimalisering 26 oktober 2016 28 / 28