TW2020 Optimalisering Hoorcollege 7 Leo van Iersel Technische Universiteit Delft 21 oktober 2015 Leo van Iersel (TUD) TW2020 Optimalisering 21 oktober 2015 1 / 20
Deze week: algoritmes en complexiteit Hoe meten we de performance van algoritmes? Waar ligt de grens tussen een goed en een slecht algoritme? Leo van Iersel (TUD) TW2020 Optimalisering 21 oktober 2015 2 / 20
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 21 oktober 2015 3 / 20
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 21 oktober 2015 3 / 20
Een probleem is een beslissingsprobleem als het 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 21 oktober 2015 4 / 20
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 21 oktober 2015 5 / 20
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) 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 21 oktober 2015 5 / 20
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) 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; de tijdscomplexiteit van een algoritme wordt ook vaak de looptijd (running time) genoemd. Leo van Iersel (TUD) TW2020 Optimalisering 21 oktober 2015 5 / 20
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 21 oktober 2015 6 / 20
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 21 oktober 2015 6 / 20
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 21 oktober 2015 6 / 20
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)) Definitie Een algoritme is polynomiaal als het tijdscomplexiteit O(p(n)) heeft met p(n) een polynoom. Leo van Iersel (TUD) TW2020 Optimalisering 21 oktober 2015 6 / 20
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)) 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 21 oktober 2015 6 / 20
Vraag (1) Wat is de invoerlengte als de invoer een getal is? Leo van Iersel (TUD) TW2020 Optimalisering 21 oktober 2015 7 / 20
Vraag (1) Wat is de invoerlengte als de invoer een getal is? Vraag (2) Wat is de invoerlengte van een LP? Leo van Iersel (TUD) TW2020 Optimalisering 21 oktober 2015 7 / 20
Wat is de invoerlengte als de invoer een graaf is? Leo van Iersel (TUD) TW2020 Optimalisering 21 oktober 2015 8 / 20
Wat is de invoerlengte als de invoer een graaf is? Dit hangt af van de representatie van de 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 21 oktober 2015 8 / 20
Wat is de invoerlengte als de invoer een graaf is? Dit hangt af van de representatie van de 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 21 oktober 2015 8 / 20
Wat is de invoerlengte als de invoer een graaf is? Dit hangt af van de representatie van de 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 21 oktober 2015 8 / 20
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 21 oktober 2015 9 / 20
Definitie De klasse P is de klasse van alle (beslissings)problemen waarvoor een polynomiaal algoritme bestaat. Problemen in P worden makkelijke problemen genoemd. 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 21 oktober 2015 9 / 20
Definitie De klasse P is de klasse van alle (beslissings)problemen waarvoor een polynomiaal algoritme bestaat. Problemen in P worden makkelijke problemen genoemd. 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 21 oktober 2015 9 / 20
Definitie De klasse P is de klasse van alle (beslissings)problemen waarvoor een polynomiaal algoritme bestaat. Problemen in P worden makkelijke problemen genoemd. 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. Eén van de zeven millennium problemen ($1.000.000): is P = N P? Leo van Iersel (TUD) TW2020 Optimalisering 21 oktober 2015 10 / 20
Definitie De klasse P is de klasse van alle (beslissings)problemen waarvoor een polynomiaal algoritme bestaat. Problemen in P worden makkelijke problemen genoemd. 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. 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 21 oktober 2015 10 / 20
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 21 oktober 2015 11 / 20
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 21 oktober 2015 12 / 20
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 [u,v] 0 voor elke pijl [u, v] A en met s, t V? Algoritme W := {s} ρ(s) := 0 ρ(v) := c [s,v] voor elk punt v V \ {s} (met c [s,v] = wanneer [s, v] / A) Herhaal totdat W = V : 1 Vind x V \ W met minimale ρ(x) 2 W := W {x} 3 Voor elke y V \ W met [x, y] A ρ(y) := min{ρ(y), ρ(x) + c[x,y] } Leo van Iersel (TUD) TW2020 Optimalisering 21 oktober 2015 13 / 20
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 21 oktober 2015 14 / 20
Algoritme van Ford-Fulkerson voor Max Flow 1 Begin met f ij = 0 voor alle [i, j] A 2 Maak een gerichte hulpgraaf D f = (V, A f ) als volgt. Voor elke pijl [i, j] van D: als f ij < b ij dan [i, j] A f als f ij > 0 dan [j, i] A f 3 Geval 1: er bestaat een pad P van s naar t in D f. Definieer: α := min({b ij f ij [i, j] ligt op P} Vermeerder stroom f als volgt: f ij := f ij + α f ij := f ij α Ga naar (2). {f ij [j, i] ligt op P}) 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 21 oktober 2015 15 / 20
Voorbeeld Wat is de complexiteit van het algoritme van Ford-Fulkerson voor het vinden van een maximum stroom, als alle capaciteiten geheeltallig zijn? Dit algoritme is niet polynomiaal. Leo van Iersel (TUD) TW2020 Optimalisering 21 oktober 2015 16 / 20
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 21 oktober 2015 17 / 20
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 21 oktober 2015 17 / 20
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 21 oktober 2015 17 / 20
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 21 oktober 2015 18 / 20
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 21 oktober 2015 18 / 20
Leo van Iersel (TUD) TW2020 Optimalisering 21 oktober 2015 19 / 20
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 21 oktober 2015 20 / 20