LO118D Forelesning 2 (DM) Kjøretidsanalyse, matematisk induksjon, rekursjon 22.08.2007
1 Kjøretidsanalyse 2 Matematisk induksjon 3 Rekursjon
Kjøretidsanalyse Eksempel Finne antall kombinasjoner med minst en rød dings fra en mengde med røde og grønne dingser.
Hvor bra er en algoritme? Problem Hvordan kan vi sammenligne to algoritmer og finne ut hvilken som er best? Løsning Vi prøver å estimere kjøretiden og plassbruken til algoritmene.
Hvorfor estimere? Det er mulig å finne eksakt kjøretid og plassbruk I de fleste tilfeller vil dette være upraktisk og koste mer enn det smaker Vi teller derfor dominante steg i forhold til størrelsen på input n, og gir et estimat
Typer estimat 1 Beste mulige kjøretid, korteste tid som trengs for input n 2 Verste mulige kjøretid, lengste tid som trengs for input n 3 Gjennomsnittlig kjøretid for et endelig antall input n
Orden Vi definerer det mest dominante leddet i estimatet som algoritmens orden. Eksempel Vi har en algoritme som bruker t(n) = 60n 2 + 5n + 1 steg på å fullføre. Hva er det dominante leddet her?
Orden Kjøretiden for denne algoritmen vokser som n 2 ettersom n øker, vi sier at den har orden n 2 : t(n) = Θ(n 2 ) eller t(n) Θ(n 2 ) Vi bytter altså ut et uttrykk med et enklere uttrykk som har samme vekstrate.
Asymptotiske grenser Definisjon Gitt at f og g er funksjoner med domene {1, 2, 3,...}. Da kan vi skrive: f (n) = O(g(n)) eller f (n) O(g(n)) hvis vi har en konstant C 1 slik at: f (n) C 1 g(n) Dette kaller vi asymptotisk øvre grense (asymptotic upper bound).
Asymptotiske grenser Definisjon Tilsvarende: f (n) = Ω(g(n)) eller f (n) Ω(g(n)) hvis vi har en konstant C 2 slik at: f (n) C 2 g(n) Dette kaller vi asymptotisk nedre grense (asymptotic lower bound).
Asymptotiske grenser Definisjon Slår sammen de to tidligere og skriver: f (n) = Θ(g(n)) eller f (n) Θ(g(n)) hvis: f (n) = O(g(n)) og f (n) = Ω(g(n)) Dette kaller vi asymptotisk øvre og nedre grense (asymptotic tight bound).
Asymptotiske grenser Eksempel La oss se på de asymptotiske grensene for det forrige eksempelet: t(n) = 60n 2 + 5n + 1
Asymptotiske grenser Teorem La: p(n) = a k n k + a k 1 n k 1 +... + a 1 n + a 0 være et polynom i n av grad k, der ingen a i er negative. Da er: p(n) = Θ(n k )
Asymptotiske grenser Hvordan er det med asymptotiske grenser for logaritmiske funksjoner?
Kjøretidsanalyse Hvor fort vokser 1 + 2 + 3 +... + n?
Kjøretidsanalyse Hva er tidskompleksiteten til denne kodesnutten? 1 for i in 1 to n 2 for j in 1 to i 3 x = x + 1
Kjøretidsanalyse Noen vanlige tidskompleksiteter: Theta-form Θ(1) Θ(log n) Θ(n) Θ(n log n) Θ(n k ), k 1 Θ(c n ), c > 1 Θ(n!) Navn Konstant Logaritmisk Lineær n log n Polynomisk Eksponensiell Faktoriell
Matematisk induksjon Problem Vi har en sammenheng P(n), for alle n. Hvordan kan vi bevise at det stemmer? Løsning Matematisk induksjon.
Matematisk induksjon Metode Vi har en sammenheng P(n) med positive heltall som domene. Da gjør vi som følger: 1 Vis at P(1) er riktig. 2 Vis at P(n) P(n + 1) for alle n.
Matematisk induksjon Metode Matematisk induksjon består altså av to steg: 1 Basissteg 2 Induktivt steg
Matematisk induksjon Eksempel Bruk matematisk induksjon til å vise at summen av de n første odde heltallene er n 2.
Rekursjon Definisjon En rekursiv funksjon er en funksjon som kaller seg selv En rekursiv algoritme er en algoritme som inneholder en rekursiv funksjon
Rekursjon En lang rekke problemer kan løses ved å dele dem opp i mindre delproblemer av samme type som de originale Dette kalles ofte splitt og hersk. Man fortsetter delingen til man når et delproblemer som er tivielt å løse Løsningene på alle delproblemene kombineres til en løsning på det originale problemet
Rekursjon Eksempel Beregning av fakultet.
Rekursjon Fakultet Denne algoritmen beregner n! ved hjelp av rekursjon. input: n, et heltall større eller lik 0 output: n! 1 factorial(n) 2 if n == 0 3 return 1 4 return n factorial(n 1)
Rekursjon En rekursiv algoritme består i hovedsak av to steg: Basistilfelle Rekursivt kall
Rekursjon og matematisk induksjon Rekursjon og matematisk induksjon er nært beslektet Matematisk induksjon kan brukes for å vise at en rekursiv algoritme er korrekt