Kjøretidsanalyse Hogne Jørgensen
Program Presentasjon/tips til Øving 5 Kompleksitetsanalyse Kahoot Rekurrensligninger Kahoot 2
Øving 5 Veibygging i Ogligogo Finne dyreste kant i minimalt spenntre Prim eller Kruskal Prim er lettest Oversett fra psudokode 3
Hvorfor kjøretidsanalyse? Trenger å vite hvor rask en algoritme er Kjøretiden bestemt av inputstørrelse Hva skjer når antall input går mot uendelig? 4
Analyse Matematisk uttrykk gitt inputstørrelsen for i in xrange(n): gjørnoe() for i in xrange(n): for j in xrange(n): gjørnoeannet() Kjøretid: f(n) = c 1 n + c 2 n 2 hvor c 1 er kjøretiden for gjørnoe() og c 2 er kjøretiden for gjørnoeannet() 5
Største ledd c 1 og c 2 er avhengig av maskinvare og kompleksiteten til gjørnoe() og gjørnoeannet() c 1 = 10, c 2 = 2 Om input er stort: 10n 2n 2 Kun n 2 er interessant og vi dropper de minste leddet Dropper 2-tallet fordi det er store forskjeller på maskinvare og for å forenkle beregninger 6
7
O- og Ω-notasjon O(g(n)) betyr at funksjonen vokser ikke raskere enn g(n) 2n 2 + 10n = O n 3 2n 2 + 10n = O n 2 Ω(g(n)) betyr at funksjonen vokser ikke saktere enn g(n) 2n 2 + 10n = Ω n 2n 2 + 10n = Ω n 2 8
Θ-notasjon Θ(g(n)) betyr at funksjonen vokser like raskt som g(n) 2n 2 + 10n = Θ(n 2 ) 687n 2 + 43n log n + 10n + 3 log n + 61 = Θ(n 2 ) 9
Formell definisjon Θ g n = *f n det finnes positive konstanter c 1, c 2 og n 0 slik at 0 c 1 g n f n c 2 g(n) for alle n n 0 } Må finne c 1, c 2 og n 0 for å formelt bevise at f(n) = Θ g n 10
Regneeksempel 2n 2 4n + 1 = Θ(n 2 ) Definisjon: 0 c 1 g n f n c 2 g(n) 0 c 1 n 2 For alle positive c 1 c 1 n 2 2n 2 4n + 1 Setter c 1 = 1 For alle n 4 (4 2 2 4 2 4 4 + 1 16 17 ) 2n 2 4n + 1 c 2 n 2 Setter c 2 = 100 For alle n 1 Altså vil c 1 = 1, c 2 = 100 og n 0 = 4 være en gyldig løsning 11
Kompleksitetsklasser Konstant: 1 Logaritmisk: log b n Lineært: n Polynomisk: n k Eksponensiell: k n Faktoriell: n! 12
Kompleksitetsklasser 1, e, 99999999 log n, ln n, log 40 n, log n 2 (log n) 2 n, n + log n 2 n log n n 2 n 3 2 n 3 n n! n n 13
14
Ting å legge merke til Grunntall for logaritmer har ingenting å si log a n = Θ(log b n) Grunntall for potenser har mye å si a n b n hvis a b Alle funksjoner kan ikke sammenlignes 1+sin n Eksempel: n og n 1 + sin n oscillerer mellom 0 og 2 O og Ω er ikke knyttet til worst-case og best-case Men de brukes ofte til å angi kjøretiden 15
16 Kahoot
Kjøretidsanalyse for rekursive algoritmer En rekursiv algoritme er en algoritme som kaller på seg selv en eller flere ganger Fire steg: 1. Velge en metrikk som indikerer inputstørrelse 2. Bestemme algoritmens operasjonsfunksjon f(n) som en funksjon av inputstørrelsen 3. Sette opp en rekurrensligning T n = T + + f n, T 1 = 4. Løse rekurrensen på en eller annen måte 17
Rekurrensregning Iterasjonsmetoder Foroversubstitusjon Bakoversubstitusjon Substitusjonsmetoden Tremetoden Masterteoremet Variabelskifte 18
Foroversubstitusjon Relativt enkel Regner T(1), T(2), T(3)... til man ser et mønster Løsningen får du ved å finne ut hva det n-te elementet blir 19
Tower of Hanoi Hvor mange trekk trenger man? 20
Tower of Hanoi def Hanoi(N,A,B,C): if N > 1: Hanoi(N-1, A, C, B) print "Flytter disk fra " + A + " til " + C Hanoi(N-1, B, A, C) else: print "Flytter disk fra " + A + " til " + C 21
Tower of Hanoi 1. Inputstørrelse: hvor mange disker som skal flyttes, N 2. Operasjonskostnaden skrive ut disk f(n) = 1 3. For hver Hanoi(N,...) kalles Hanoi(N-1,...) to ganger T N = 2T N 1 + 1, T 1 = 1 4. Løs rekurrensen! 22
Tower of Hanoi Foroversubsitusjon: T(1) = 1 T 2 = 2 T 1 + 1 = 2 + 1 = 3 T 3 = 2 T 2 + 1 = 6 + 1 = 7 T 4 = 2 T 3 + 1 = 14 + 1 = 15 Noen som ser et mønster? 23
Tower of Hanoi Rekken blir: 1,3,7,15,31,63 Dette er det samme som: 2 1 1, 2 2 1, 2 3 1 Dermed må det n-te tallet være 2 n 1 T n = 2 n 1 = Θ(2 n ) 24
Tilbakesubstitusjon Går motsatt vei fra T(n) til T(1) T n = 2T n 1 + 1 T n = 2 2T n 2 + 1 + 1 T n = 2 2 2T n 3 + 1 + 1 + 1 Ganger ut og får: T n = 2T n 1 + 1 T n = 4T n 2 + 2 + 1 T n = 8T n 3 + 4 + 2 + 1 25
Tilbakesubstitusjon Begynner å se det samme mønsteret: 1 1 + 2 = 3 1 + 2 + 4 = 7 1 + 2 + 4 + 8 = 15 2 1 1, 2 2 1,, 2 n 1 T n = 2 n 1 = Θ(2 n ) 26
Substitusjonsmetoden 1. Gjett en løsning 2. Bruk induksjon til å bevise at det stemmer Krever at du er forsiktig og presis Krever mer forståelse enn iterasjonsmetodene 27
Tremetoden Tegn rekursjonstre for T(n) Hver node har verdien f(n) Summer alle nodene i treet Eks: T n = 2T n/2 + n, T 1 = 1 Høyden til treet er lg(n) Altså vil den totale summen være: Θ(n lg n) 28
Masterteoremet Automatisk måte å finne kjøretiden til (mange) rekurrenser på formen: T n = at n/b + f n, a 1, b 1 Tilfelle Krav 1 2 Løsning f n = O n c, c < log b a T n = Θ(n log b a ) f n = Θ n c, c = log b a T n = Θ(n log b a lg n) 3 f n = Ω n c, c > log b a af n b kf n, k < 1 og n stor nok T n = Θ(f(n)) 29
Tilfelle 1 T n = 16T n 2 + 6n2 a = 16, b = 2, f n = 6n 2 c = 2 log b a = log 2 16 = 4 > c T n = Θ n log b a = Θ(n 4 ) 30
Tilfelle 2 T n = 2T n 2 + n (Samme som merge sort) a = 2, b = 2, f n = n c = 1 log b a = log 2 2 = 1 = c T n = Θ n log b a lg n = Θ(n lg n) 31
Tilfelle 3 T n = 2T n + 2 n2 a = 2, b = 2, f n = n 2 f n = Ω(n c ) hvis c = 2 log b a = log 2 2 = 1 < c Regulærbetingelse: af n b kf n, k > 1 og n stor nok 2 n2 4 kn2, velger k = 1/2 T n = Θ f n = Θ(n 2 ) 32
Variabelskifte Kan ofte være lettere å løse en rekurrens om man bytter ut variablene Bytter tilbake etter å ha regnet ferdig Kan ofte brukes for å forenkle uttrykk for å få den på masterteoremform Fin å bruke om man har kvadratrot i uttrykket 33
Variabelskifte - eksempel T n = 4T n + lg n Setter n = 2 m, altså vil: n 1/2 = 2 m/2, lg n = m T 2 m = 4T(2 m/2 ) + m Setter S m = T(2 m ) S m = 4S(m/2) + m a = 4, b = 2, f m = m m log b a = m log 2 4 = m 2 > f(m) Tilfelle 1 S m = Θ(m 2 lg m) T 2 m = Θ(m 2 lg m ) T n = Θ((lg n) 2 lg lg n ) 34