Hoofdstuk 8: Algoritmen en Complexiteit
Vandaag: Hoe meten we de performance van algoritmen? Waar ligt de grens tussen een goed en een slecht algoritme? 22 oktober 2014 1
Vandaag: Hoe meten we de performance van algoritmen? Waar ligt de grens tussen een goed en een slecht algoritme? Algoritme = preciese omschrijving van reeks aan instructies die elke instantie van het omschreven probleem oplost 22 oktober 2014 1
Vandaag: Hoe meten we de performance van algoritmen? Waar ligt de grens tussen een goed en een slecht algoritme? Algoritme = preciese omschrijving van reeks aan instructies die elke instantie van het omschreven probleem oplost Tot nu toe 3 voorbeelden: Simplex algoritme Dijkstra s algoritme Ford-Fulkerson algoritme 22 oktober 2014 1
Tijdscomplexiteit Een algoritme kan het probleem oplossen, maar hoe lang duurt dat? We meten dit is het aantal elementaire operaties: Optellen, aftrekken, vermenigvuldigen, vergelijken, etc. Voorbeeld 1: Volledige enumeratie TSP Voorbeeld 2: Volledige enumeratie MST Voorbeeld 3: Simplex algoritme 22 oktober 2014 2
Tijdscomplexiteit Een algoritme kan het probleem oplossen, maar hoe lang duurt dat? We meten dit is het aantal elementaire operaties: Optellen, aftrekken, vermenigvuldigen, vergelijken, etc. Voorbeeld 1: Volledige enumeratie TSP Voorbeeld 2: Volledige enumeratie MST Voorbeeld 3: Simplex algoritme Worst-case gedrag afhankelijk van grootte van de instantie In welke orde neemt de rekentijd toe bij groter wordende instanties? 22 oktober 2014 2
Orde-notaties voor groei Definitie: Zij f (n) en g(n) functies zijn van de positieve integers naar de positieve reële getallen: (a) f (n) = O(g(n)) als er een constante c > 0 is zdd, voor groot genoege n, f (n) cg(n) 22 oktober 2014 3
Orde-notaties voor groei Definitie: Zij f (n) en g(n) functies zijn van de positieve integers naar de positieve reële getallen: (a) f (n) = O(g(n)) als er een constante c > 0 is zdd, voor groot genoege n, f (n) cg(n) (b) f (n) = Ω(g(n)) als er een constante c > 0 is zdd, voor groot genoege n, f (n) cg(n) 22 oktober 2014 3
Orde-notaties voor groei Definitie: Zij f (n) en g(n) functies zijn van de positieve integers naar de positieve reële getallen: (a) f (n) = O(g(n)) als er een constante c > 0 is zdd, voor groot genoege n, f (n) cg(n) (b) f (n) = Ω(g(n)) als er een constante c > 0 is zdd, voor groot genoege n, f (n) cg(n) (c) f (n) = Θ(g(n)) als er constanten c, c > 0 zijn zdd, voor groot genoege n, cg(n) f (n) c g(n) 22 oktober 2014 3
Nuttige eigenschap f (n) lim n g(n) = 0, then f (n) O(g(n)) f (n) lim n g(n) = c > 0, then f (n) Θ(g(n)) f (n) lim n g(n) =, then f (n) Ω(g(n)) 22 oktober 2014 4
Voorbeelden f (n) = 2n 3 + 5n 2 + 4n + 10 f (n) = n log(n) + 5n f (n) = 2 n + n 4 22 oktober 2014 5
Voorbeelden f (n) = 2n 3 + 5n 2 + 4n + 10 f (n) = Θ(n 3 ) f (n) = n log(n) + 5n f (n) = Θ(n log(n)) f (n) = O(n 2 ) f (n) = 2 n + n 4 f (n) = Θ(2 n ) 22 oktober 2014 5
Grootte van een instantie Complexiteit van algoritme wordt gemeten als functie van grootte van een instantie Grootte van een instantie = de lengte van een redelijke representatie van de input in een computer, i.a.w. het aantal symbolen nodig om de instantie mee te geven aan een computer Voorbeeld: Integer: binary encodering log(n) = O(log(n)) Voorbeeld: Graaf: Adjacency matrix: O( V 2 ) Adjacency list: V + 2 E = O( E ) 22 oktober 2014 6
Analyse van algoritmen Voorbeeld 1: Dijkstra s algoritme Voorbeeld 2: Ford-Fulkerson algoritme Voorbeeld 3: Simplex algoritme 22 oktober 2014 7
Polynomiale tijd Welke complexiteit is acceptabel? Polynomiale rekentijd O(n), O(n 3 ), O(n 2.5 ), O(n log(n)) 22 oktober 2014 8
Polynomiale tijd Welke complexiteit is acceptabel? Polynomiale rekentijd O(n), O(n 3 ), O(n 2.5 ), O(n log(n)) Waarom is polynomiale tijd goed? Betere schaalbaarheid Profiteert meer van technologische ontwikkeling Combineren van polynomiale algoritmes als subroutine blijft polynomiaal 22 oktober 2014 8
Schaalbaarheid Tabel: Groei van polynomiale en exponeniële functies Functie Functiewaarde 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 22 oktober 2014 9
Profijt van technologische ontwikkeling 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 22 oktober 2014 10
Terug naar bekende algoritmen Dijkstra s algoritme O( V 2 ) is polynomiaal Ford-Fulkerson algoritme O(f x A ) is niet-polynomiaal Simplex algoritme Niet-polynomiaal Tot nu toe alleen bovengrens gegeven, misschien is algoritme wel polynomiaal. 22 oktober 2014 11
Ford-Fulkerson Niet polynomiaal vanwege aantal iteraties dat afhangt van grootte van optimale flow. Kan het voorkomen dat aantal iteraties inderdaad orde f heeft? 22 oktober 2014 12
Ford-Fulkerson Niet polynomiaal vanwege aantal iteraties dat afhangt van grootte van optimale flow. Kan het voorkomen dat aantal iteraties inderdaad orde f heeft? 22 oktober 2014 12
Ford-Fulkerson Niet polynomiaal vanwege aantal iteraties dat afhangt van grootte van optimale flow. Kan het voorkomen dat aantal iteraties inderdaad orde f heeft? Wel polynomiaal wanneer altijd kortste groeipad wordt gekozen 22 oktober 2014 12
Simplex algoritme Aantal iteraties kan exponentieel zijn Minimale voorwaarden voor voorbeeld: Exponentiëel aantal hoekpunten Serie van exponentiëel veel hoekpunten met toenemende doelstellingswaarde 22 oktober 2014 13
Simplex algoritme Aantal iteraties kan exponentieel zijn Minimale voorwaarden voor voorbeeld: Exponentiëel aantal hoekpunten Serie van exponentiëel veel hoekpunten met toenemende doelstellingswaarde Opm: Een d-dimensionale kubus heeft 2d facets en 2 d hoekpunten 22 oktober 2014 13
22 oktober 2014 14
Simplex algoritme Open vraag: Is er een pivotregel die wel leidt tot een polynomiaal algoritme? Alternatieve algoritmen voor LP: (Simplex algoritme: theoretisch slecht, goed in praktijk) Ellipsoid method: theoretisch goed, langzaam in praktijk Interior Point Method: theoretisch goed, snel in praktijk 22 oktober 2014 15