Divide-and-Conquer II Lars Vidar Magnusson 1712014 Kapittel 4 Analyse av divide-and-conquer algoritmer ved hjelp av rekursjonstrær Analyse av divide-and-conquer algoritmer ved hjelp av masterteoremet
Løse Recurrences med Rekursjonstrær Rekursjonstrær er et alternativ til substitusjonsmetoden for å løse recurrences Rekursjonstrær er en kraftfull metode som kan brukes for å løse alle recurrence ligninger Den vanligste bruken er som et komplement til substitusjonsmetoden ved at man bruker rekursjonstrær for å komme frem til en gjetning Rekursjonstrær kan brukes for å løse en recurrence direkte, men dette krever nøyaktighet Man kan ofte tillate seg litt unøyaktigheter hvis man bare skal komme fram til en gjetning
Et Eksempel - T (n) = 2T (n/2) + Θ(n) La oss ta en titt på recurrence ligningen som beskriver både Merge-Sort og Find-Maximum-Subarray { Θ(1) if n = 1 T (n) = 2T (n/2) + Θ(n) if n > 1 Kjøretiden er konstant når n = 1 Når n > 1 så gjør vi to rekursive kall med halve input, og vi har en intern kostnad Θ(n) relatert til sammenslåingen i Merge-Sort og det å finne maksimum sum som spenner over midtpunktet i Find-Maximum-Subarray
Et Eksempel - Første Steg Første steg i rekursjonen kan sees i diagrammet under
Et Eksempel - Andre Steg Andre steg i rekursjonen kan sees i diagrammet under
Et Eksempel - Fullt Tre Det fulle treet sammen med kostnader for hvert nivå og treets dybde kan sees under
Et Eksempel - Analyse av Treet Når trærne er balanserte og kostnaden på hvert nivå er lik kan vi ganske enkelt finne en øvre grense bare ved å multplisere kostnaden på hvert nivå med høyden T (n) = cn log n = O(n log n)
Et Annet Eksempel - T (n) = 3T (n/4) + Θ(n 2 ) La oss ta en titt på et annet eksempel { Θ(1) if n = 1 T (n) = 3T (n/4) + Θ(n 2 ) if n > 1 Den interne kostnaden er Θ(n 2 ) Dette kan vi erstatte med cn 2 for en konstant c > 0
Et Annet Eksempel - Første Steg Det første steget cn 2 T ( n 4 ) T ( n 4 ) T ( n 4 )
Et Annet Eksempel - Andre Steg Det andre steget cn 2 c( n 4 )2 c( n 4 )2 c( n 4 )2 T ( n 16 ) T ( n 16 ) T ( n 16 ) T ( n 16 ) T ( n 16 ) T ( n 16 ) T ( n 16 ) T ( n 16 ) T ( n 16 )
Et Annet Eksempel - Det Fulle Rekursjonstreet Det fulle rekursjonstreet cn 2 c( n 4 )2 c( n 4 )2 c( n 4 )2 c( n 16 )2 c( n 16 )2 c( n 16 )2 c( n 16 )2 c( n 16 )2 c( n 16 )2 c( n 16 )2 c( n 16 )2 c( n 16 )2 T (1) T (1) T (1) T (1) T (1) T (1) T (1) T (1) T (1) T (1) T (1) T (1)
Et Annet Eksempel - Analysere Treet Kostnaden på rotnivå kan leses av direkte cn 2 Kostnaden på første nivå er summen av alle tre nodene 3 16 cn2 Kostnaden på nivå i er summen av alle nodene ( 3 16 )i cn 2 Høyden til treet kan regnes ut ved å se når n = 1 n/4 i = 1 4 i = n i = log 4 n Antall noder i bunnen av treet er 3 log 4 n = n log 4 3 = Θ(n log 4 3 )
Et Annet Eksempel - Analysere Treet Siden vi i dette eksempelet ikke har samme kostnad på hvert nivå må vi ty til å summere alle kostnadene T (n) = cn 2 + 3 ( ) 3 2 ( ) 3 log4 16 cn2 + cn 2 n 1 + + cn 2 + Θ(n log 4 3 ) 16 16 log 4 n 1 ( ) 3 i = cn 2 + Θ(n log 4 3 ) 16 i=0 ( ) 3 i < cn 2 + Θ(n log 4 3 ) en uendelig geometrisk minkende serie 16 i=0 1 = 1 (3/16) cn2 + Θ(n log 4 3 ) = 16 13 cn2 + Θ(n log 4 3 ) = O(n 2 ) Utifra dette kan vi si at kostnaden i roten av treet dominerer kostnaden til treet Siden denne kostnaden er Θ(n 2 ) så må Ω(n 2 ) være en nedre grense for recurrence ligningen
Et Annet Eksempel - Bevis Nå som vi har kommet fram til en gjetning ved hjelp av analyse av rekursjonstreet kan vi bruke denne gjetningen i substitusjonsmetoden Vi vil bevise at T (n) = 3T (n/4) + Θ(n 2 ) er O(n 2 ) Dette krever at vi kan bevise at T (n) dn 2 for en konstant d > 0 T (n) 3T (n/4) + cn 2 3d(n/4) 2 + cn 2 = 3 16 dn2 + cn 2 dn 2 Det siste steget holder så lenge d (16/13)c
Masterteoremet Masterteoremet kan ses som en enkel oppskrift for å løse recurrence ligninger av typen T (n) = at (n/b) + f (n) hvor a 1 og b > 1 er konstanter og f (n) er asymptotisk positiv funksjon For å benytte masterteoremet må man kunne skille mellom tre muligheter 1 Hvis f (n) = O(n log b a ɛ ) for en konstant ɛ > 0 så er T (n) = Θ(n log b a ) 2 Hvis f (n) = Θ(n log b a ) så er T (n) = Θ(n log b a log n) 3 Hvis f (n) = Ω(n log b a+ɛ ) for en konstant ɛ > 0 og hvis af (n/b) cf (n) for en konstant c 1 for store nok n så er T (n) = Θ(f (n))
Tilfelle 1 - f (n) = O(n log b a ɛ ) Det første tilfelle dekker aller situasjoner hvor kostnaden internt i en node er polynomisk mindre enn veksten til treet I disse situasjonene vil veksten til treet dominere den totale kostnaden La oss se på recurrence ligningen T (n) = 9T (n/3) + n Her er a = 9, b = 3 og f (n) = n Vi får da at n log b a = n log 3 9 = Θ(n 2 ) Siden f (n) = O(n log 3 9 ɛ ) for ɛ = 1 så kan vi trekke slutningen at T (n) = Θ(n 2 )
Tilfelle 3 - f (n) = Ω(n log b a ) Det tredje tilfellet dekker alle situasjoner hvor kostnaden internt i en node er polynomisk større enn veksten til treet I disse situasjonene vil den interne kostnaden dominere den totale kostnaden La oss se på recurrence ligningen T (n) = 3T (n/4) + n log n Her er a = 3, b = 4 og f (n) = n log n Vi får da at n log b a = n log 4 3 = O(n 0793 ) Siden f (n) = Ω(n log 4 3+ɛ ) for ɛ 02 må vi bare sjekke at kontrollen som holder for c = 3/4 af (n/b) = 3(n/4) log(n/4) (3/4)n log n = cf (n) Vi kan derfor trekke slutningen at T (n) = Θ(n log n)
Tilfelle 2 - f (n) = Θ(n log b a ) Det siste tilfellet dekker alle situasjoner hvor veksten av treet og den interne kostnaden er av samme størrelse La oss se på recurrence ligningen T (n) = T (2n/3) + 1 Her er a = 1, b = 3/2 og f (n) = 1 Vi får da at n log b a = n log 3/2 1 = O(n 0 ) = 1 Vi kan trekke slutningen at T (n) = Θ(log n)
Når Masterteoremet Ikke Kan Brukes Masterteoremet er ekstremt nyttig når en recurrence ligning dekkes av en av de tre tilfellene Men vi må være nøye så vi ikke benytter oss av teoremet når en situasjon faller utenom La oss ta en titt på eksempelet T (n) = 2T (n/2) + n log n Her er a = 2, b = 2 og f (n) = n log n Vi får da at n log b a = n log 2 = n Det kan være lett å falle i fellen og tenke at siden f (n) = n log n er større enn n så kan vi benytte oss av det tredje tilfellet Problemet er at f (n) ikke er polynomisk større