Upload
others
View
3
Download
0
Embed Size (px)
Citation preview
1
Algorithms and Architectures IRasmus Løvenstein Olsen (RLO) , Jimmy Jessen Nielsen (JJE)
Mm2: Rekursive algoritmer og rekurrens- October 10, 2008
2
Algorithms and Architectures II
1. Introduction to analysis and design of algorithms(RLO)2. Recursive algorithms and recurrences (RLO)3. More about recurrences (RLO)4. Greedy algorithms, backtracking and more recurrences(RLO)5. Counting, probabilities and randomized algorithms (RLO)6. More sorting algorithms: Heap sort and quick sort (RLO)7. A little bit more about sorting - and more times for exercises (RLO)8. Hash tables, Hashing and binary search trees (RLO)9. Binary search trees, red-black trees (JJE)10. Red-black trees continued + string matching (JJE)
3
Dagsorden
• Introduktion til rekursion og rekursive algoritmer• Divide and conquer taktikken• Eksempler på rekursive algoritmer
• Merge sort algoritmen• Fibonaccis tal• Hanois tårne• Factoriale tal• ….
• Substitutionsmetoden• Generelt om rekursive algoritmer• Opsummering og konklusion• Opgaver
4
Hanois tårne
• Du må kun flytte en ring ad gangen • På hver eneste pind må der aldrig være en større ring på en mindre
• Spørgsmål: • Hvordan ser algoritmen ud?• Hvor lang tid tager det?
5
Algoritme til løsning af Hanois tårne
• n-1 skiver flyttes (hvis n>1) fra pind A til pind C (ved hjælp af denne teknik).
• Skive n flyttes fra pind A til pind B. • De n-1 skiver flyttes atter (hvis n>1) fra pind C til pind B (igen ved
hjælp af denne teknik).
A B C
6
Fibonacci tal
• Fibonacci’s tal først beskrevetaf Leonardo da Pisa
• Tal udviklingen er beskrevetsåledes at
1,1 21 == FF
1 13
5
2
8
3;21 ≥+= −− nFFF nnn
7
Merge-sort algoritmen
• Baserer sig på merge algoritmen vi så på sidste gang
• Men lad os lige genopfriske hvordan den så udfør vi ser på hvordan vi kan sortere med den vha. rekursivitet
8
Merge algoritmen – grafisk representation
…… …
2 4 5 7 1 2 3 6
2 4 5 7 8 1 2 3 6 8L R 1 4 5 7 1 2 3 6
2 4 5 7 8 1 2 3 6 8L R
1 2 2 7 1 2 3 6
2 4 5 7 8 1 2 3 6 8L R
1 2 5 7 1 2 3 6
2 4 5 7 8 1 2 3 6 8L R
9
Merge algoritmen
Merge(A, p, q, r)
1 n1 = q-p+1 10 i=1
2 n2 = r-q 11 j=1
3 Make arrays L[1..n1+1], R[1..n2+1] 12 for k = p to r
4 for i = 1 to n1 13 do if L[i] ≤ R[j]
5 do L[i] = A[p+i-1] 14 then A[k] = L[i]
6 for j = 1 to n2 15 i = i+1
7 do R[j] = A[q+j] 16 else
8 L[n1+1] = Inf 17 j=j+1
9 R[n2+1] = Inf
10
Merge-sort algoritmen – grafisk representation
1 2 2 3 4 5 6 7
2 4 5 7 1 2 3 6
2 5 4 7 1 3 2 6
5 2 4 7 1 3 2 6
Merge-sort
Merge-sort
Merge-sort
Talrække (input)
11
Merge-sort
Merge-sort(A,p,r) Cost Tid
1 if p<r c1 Θ(1)
2 then q=(p+r)/2 c2 Θ(1)
3 Merge-Sort(A,p,q) c3 T(n/2)
4 Merge-Sort(A,q+1,r) c4 T(n/2)
5 Merge(A,p,q,r) c5 Θ(n)
p = start af arrayr = slut af array
12
Kompleksitet af merge – sort algoritmen
• Konklusion
• Kan også skrives som
• Men hvorfor det sidste?
⎩⎨⎧
>Θ+=Θ
=1;)()2/(21;)1(
)(nnnTn
nT
))(log()( 2 nnnT Θ=
13
Rekurens træ
Husk at vi her antager at opgaverne kommer som n = 2k
cn
cn/2 cn/2
cn/4 cn/4 cn/4 cn/4
c c c c c c c c
Log2(n)
n
cn
cn
cn
cn
14
Dagsorden
• Introduktion til rekursion og rekursive algoritmer• Divide and conquer taktikken• Eksempler på rekursive algoritmer
• Merge sort algoritmen• Fibonaccis tal• Hanois tårne• Factoriale tal• ….
• Substitutionsmetoden• Generelt om rekursive algoritmer• Opsummering og konklusion• Opgaver
15
Substitutions metoden
• Kan kun anvendes på simplere algoritmer hvor vi er i stand til at gætte en løsning, eller løsningsstruktur
• Metoden baserer sig på at udnytte gættet til at vise løsningen
• Metoden består af to trin1. Gæt en form af løsningen2. Brug af matematisk induktion til at finde konstanter og vis at
løsningen virker
16
Eksempel med gætte metoden
• Bestem øvre eller nedre grænse for en rekurrent algoritme med kompleksitet
• Et gæt vil være T(n) = O(nlog2(n))
• Metoden går nu ud på at bevise T(n) ≤ cnLog2(n)
• Men er det nu alt?
nnTnT += )2/(2)(
17
Nogle potentielle problemer….
• Ved induktiv bevisførelse skal vi nu vise løsningen holder
• Først finder vi et startspunkt, f.eks. n0 = 1• Med T(1) =1 som den grænsende funktion får vi• T(n=1) ≤ cnLog2(n) = cLog2(1) = 0• Men 1≥0 !!! Så n0 = 1 er ikke en god basis for bevis
• Men hvis vi vælger et n ≥ n0 > 1, f.eks. n = 2 og n = 3
• Dermed får vi følgende krav til konstanten c• T(2) = 4 ≤ 2cLog2(2)• T(3) = 5 ≤ 3cLog2(3)• Dvs. at c ≥2
18
Alternative gæt
• Hvad nu hvis vi har noget der ligner noget vi kender….?
• Konklusion:• Hvis vi kan omformulere et problem til noget vi kender,
kan vi også nemmere sige noget om dets kompleksitet
nknTnT ++= )2/(2)(
19
Et andet eksempel
• Eksempel
• Et gæt kunne være løsning O(n)• Så vi prøver at vise T(n) ≤ cn med et passende valg af c
• Konklusion:• Med passende valg af funktion og konstanter kan vi vise at
T(n) ≤ cn, og vi er alle glade
• Eller er vi altid det?
1)2/()2/()( ++= nTnTnT
20
Vær opmærksom på algoritmen
• Antag vores tidligere træ
• Hvad nu hvis vi gætter at T(n) ≤ cn, dvs. T(n) = O(n)?
• Konklusion:• Vær opmærksom på hvad i ved om algoritmen.
Vi kan ikke bare ”snyde” os til en simplere algoritme….(men vi kan godt snyde os selv☺)
nknTnT ++= )2/(2)(
21
Ændring af variable
• I nogle tilfælde ligner funktionen ikke helt, men alligevel lidt …..F.eks.
• Kan der gøres noget ved den så den ligner endnu mere?• Prøv m = log2(n), og se bort fra afrundingsfunktionen
• Hvis vi nu siger at S(m) = T(2m), så får vi noget vi kender
• Endelig kan vi også transformere kompleksiteten, således at
)(log)(2)( 2 nnTnT +=
mTT mm += )2(2)2( 2/
mmTmS += )2/(2)(
)))(Log(Log)(Log())(Log()()2()(
222
2
nnOmmOmSTnT m
====
22
Dagsorden
• Introduktion til rekursion og rekursive algoritmer• Divide and conquer taktikken• Eksempler på rekursive algoritmer
• Merge sort algoritmen• Fibonaccis tal• Hanois tårne• Factoriale tal• ….
• Substitutionsmetoden• Generelt om rekursive algoritmer• Opsummering og konklusion• Opgaver
23
Ekspandering af rekurrens
• Vi starter igen med følgende kompleksitet
• Efter induktion kan vi nu se at
• Antag at n sker i 2 potens, såsom 2k, dvs. n = 2k k=Log2(n), så kan kompleksiteten også skrives som
ncnTnT 2)2/(2)( +≤
nicnTnT ii2)2/(2)( +≤
)(Log)( 221 nncncnT +≤
24
Mere generelt om den type kompleksitet
• Den generelle forskrift for kompleksiteten
• Antag at n = bk, dvs. n forekommer i potenser af k med base b• Kan derfor også udskrives som en sum
• Note: For merge-sort algoritmen er a = b = 2, og d(n) = cn
)()/()(1)1(
ndbnaTnTT
+==
∑−
=
−+=1
0
)()(k
j
jkjk bdaanT
25
Homogene og partikulære løsninger
• Homogene løsning• Udtrykker prisen for at løse et delproblem• Eksakt løsning når d(n)=0 for alle n
• Partikulære løsning• Udtrykker prisen for at danne og kombinere delproblemerne• Hvis homogene løsning er større end partikulære løsning, så vokser
kompleksiteten i samme grad som den homogene løsning• Hvis den partikulære løsning vokser med mere end nε for ε>0, så vokser den
partikulære løsning med graden af d(n)• Hvis d(n) vokser med samme hastighed som den homogene løsning, eller med
maksimalt logk(n), så vokser den partikulære løsning med log(n) x d(n)
∑−
=
−+=1
0
)()(k
j
jkjk bdaanT
Homogeneløsning
Partikulæreløsning
26
Nogle flere gode råd som konsekvens
• Hvis den homogene løsning er størst vil en hurtigere måde at kombinere delproblemerne praktisk taget ingen effekt have.Derfor bør man således finde en måde at dele problemet i endnu mindre problemer, der hurtigere kan løses
• Hvis den partikulære løsning er størst vil en formindskelse i kompleksiteten af at splitte og/eller kombinere delproblemer have størst effekt. • For eksempel vil en reducering i kompleksitet af den del af algoritmen
der opdeler arrayet A i merge-sort til en nær lineær funktion, f.eks. d(n)=cn0.9, helt sikkert reducere den samlede kompleksitet.
• NB: Der gemmer sig nok en nobel pris eller lignende til den der kan opdage en merge algoritme med en sådan kompleksitet!!
27
Kogebog for multiplikative funktioner
• En funktion er benævnt multiplikativ hvis f(xy) = f(x)f(y)
• Overvej1. a > d(b): giver at den partikulære og homogene løsning er ens, fordi (1)
bliver O(ak) ~ O(nlogb(a)). I det tilfælde afhænger kompleksiteten mest af hvorledes problemet bliver opdelt, og ikke så meget af løsningen.
2. a = d(b): bliver udtrykket O(nLogb(d(b))Logb(n)) og i tilfældet med d(n)=nα, bliver det til O(nαLogb(n))
3. a < d(b): giver at den partikulære løsning dominerer, og dermed O(d(b)k) ~ O(nlogb(d(b))). I det tilfælde give det mening at se på at minimere d(n) og/eller a og b. Et specialtilfælde hvor d(n)=nα, giver en løsning O(nα) eller O(d(n))
1)(
)()(1
0 −
−=∑
−
=
−
bda
bdabdakkk
j
jkj (1)
28
Nogle eksempler #1
• Sammenlign de følgende kompleksiteter, med T(1)=11. T(n) = 4T(n/2) + n2. T(n) = 4T(n/2) + n2
3. T(n) = 4T(n/2) + n3
• I alle tre tilfælde gælder følgende:• a = 4• b = 2• Den homogene løsning er n2 pga. antagelsen om n = bk
• k = logb(n) gør at ak = alogb(n) = nlogb(a)
• Log2(4) = 2 giver et n2
29
Nogle eksempler #2
For 1) T(n) = 4T(n/2) + n:• d(n) = n betyder at d(b=2) = 2• Fordi a = 4 > d(b=2), er løsningen n2, dvs. T(n) er O(n2)
For 2) T(n) = 4T(n/2) + n2:• d(n) = n2, hvilket betyder at d(b=2) = 4• Fordi a = 4 = d(b=2), er løsningen nLogb(d(b))Logb(n)=n2Log2(n)
For 3) T(n)= 4T(n/2) + n3:• d(n) = n3, hvilket betyder at d(b=2) = 8• Fordi a = 4 < d(b=2), er løsningen af O(nLogb(d(b))) = O(n3)
30
Andre funktioner
• Eksempel• T(1) = 1• T(n) = 3T(n/2)+2n1.5
• 2n1.5 er ikke multiplikativ, men n1.5 er (se tavlenoter)
• Prøv derfor med U(n) = T(n)/2 for alle n
• U(1) = ½• U(n) = 3U(n/2)+n1.5
• Hvis U(1) var 1, ville løsningen være nlog2(3)<n1.59
• Vi kan nu vise at U(1) = ½ er mindre end n1.59/2, dermed O(n1.59)• Fordi d(b) = b1.5 = 2.83 < a er løsningen O(ak) = O(n1.59) (ak = nLogb(a))
31
Et andet eksempel
• Betragt• T(1) = 1• T(n) = 2T(n/2) + nLogb(n)
• Homogen løsning er n, fordi a = b = 2
• Problemet er d(n) = nLogb(n), derfor skal den partikulære løsning beregnes ”manuelt”
• Løsningen er således at den partikulære er O(nLog2(n)), der er større end den homogene løsning, er derfor T(n)
)1(2
)2log(22)(
1
1
0
1
0
+=
=
−
−
=
−−−
=
− ∑∑kk
bda
k
k
j
jkjkjk
j
jkj
32
Dagsorden
• Introduktion til rekursion og rekursive algoritmer• Divide and conquer taktikken• Eksempler på rekursive algoritmer
• Merge sort algoritmen• Fibonaccis tal• Hanois tårne• Factoriale tal• ….
• Substitutionsmetoden• Generelt om rekursive algoritmer• Opsummering og konklusion• Opgaver
33
Opsummering og konklusion på forelæsning
• Rekursive algoritmer bruges i forskellige situationer hvor samme principielle problem kan løses igen og igen• Hanois tårne• Fibonacci tal• Merge-sort algoritme
• Vi så på kompleksiten af rekursive algoritmer af typen
• Løsninger af denne type, baseret på• Substitution med gæt• Ændring af variable til noget der ligner tidligere• Generel omskrivning og analyse af rekursive algoritmer
• Homogene og partikulære løsninger• Omskrivninger til standard model
⎩⎨⎧
>Θ+=Θ
=1;)()2/(21;)1(
)(nnnTn
nT
34
Og endnu en at gå hjem på☺
http://xkcd.com/
35
Dagsorden
• Introduktion til rekursion og rekursive algoritmer• Divide and conquer taktikken• Eksempler på rekursive algoritmer
• Merge sort algoritmen• Fibonaccis tal• Hanois tårne• Factoriale tal• ….
• Substitutionsmetoden• Generelt om rekursive algoritmer• Opsummering og konklusion• Opgaver
36
Opgaver
• Opgaver fra Cormen• Opgave 4.1-1, 4.1-2, 4.1-3
• Opgaver fra Aho, Hopcroft og Ullman• Opgave 9.1, 9.2, 9.3, 9.4