Datastruktur & Algoritmik1 Datastruktur & Algoritmik 3 REKURRENSER
Datastruktur & Algoritmik2 Merge Sort Merge-Sort(A,p,r) (* Sortering A[p],A[p+1],..,A[r] *) if p<r then q:= (p+r)/2 Merge-Sort(A,p,q) Merge-Sort(A,q+1,r) Merge(A,p,q,r) Merge-Sort(A,p,r) (* Sortering A[p],A[p+1],..,A[r] *) if p<r then q:= (p+r)/2 Merge-Sort(A,p,q) Merge-Sort(A,q+1,r) Merge(A,p,q,r) Rekurrens Ligning Løsning ?
Datastruktur & Algoritmik3 Rekurrens Ligning Lineær, homogen af orden k Divide-and-conquer a’er og b er konstanter Entydig løsning! Vi skal se på generelle metoder til at bestemme løsning til rekurrens ligninger (og anvende dem) Vi skal se på generelle metoder til at bestemme løsning til rekurrens ligninger (og anvende dem)
Datastruktur & Algoritmik4 Metoder Substitution (gæt og bevis) Iteration (manipulér sum) Master metoder (slå op)
Datastruktur & Algoritmik5 Rekursive Algoritmer for Søgning A LinSearch(v,A,p,r) (* Søg efter v i A[p]...A[r]*) if p<r thenb1:=(v=A[p]) b2:=LinSearch(v,A,p+1,r); return (b1 or b2) else return v=A[p] LinSearch(v,A,p,r) (* Søg efter v i A[p]...A[r]*) if p<r thenb1:=(v=A[p]) b2:=LinSearch(v,A,p+1,r); return (b1 or b2) else return v=A[p] p r DQSearch(v,A,p,r) (* Søg efter v i A[p]...A[r]*) if p<r then q:=(p+r)/2; b1:=DQSearch(v,A,p,q); b2:=DQSearch(v,A,q+1,r); return (b1 or b2) else return v=A[p] DQSearch(v,A,p,r) (* Søg efter v i A[p]...A[r]*) if p<r then q:=(p+r)/2; b1:=DQSearch(v,A,p,q); b2:=DQSearch(v,A,q+1,r); return (b1 or b2) else return v=A[p]
Datastruktur & Algoritmik6 Binære Søgning i sorteret liste A pr BinSearch(v,A,p,r) (* Søg efter v i A[p]...A[r]*) if p<r thenq:=(p+r)/2 if v=A[q] then return true else if v<A[q] then return BinSearch(v,A,p,q) else return BinSearch(v,A,q+1,r) else return (v=A[p]) BinSearch(v,A,p,r) (* Søg efter v i A[p]...A[r]*) if p<r thenq:=(p+r)/2 if v=A[q] then return true else if v<A[q] then return BinSearch(v,A,p,q) else return BinSearch(v,A,q+1,r) else return (v=A[p])
Datastruktur & Algoritmik7 Iteration Expandér rekurrens og summér Rekurrenstræ
Datastruktur & Algoritmik8 Iteration Expandér rekurrens og summér
Datastruktur & Algoritmik9 1ste Master Metode Theorem Rosen s 328
Datastruktur & Algoritmik10 2. Master Metode Theorem Rosen s 330
Datastruktur & Algoritmik11 Heltalsoperationer De gamle skolemetoder Datastruktur a1 a2 a an Mest betydende ciffer Cifre fra 0,1,2,3,4, 5,6,7,8,9 Ex.: Addition = Algoritmen a1 a2 a3.... an + b1 b2 b3.... bn = c0 c1 c2 c3.... cn 0m3m2m1 m0 mn:=0; for j:=n downto 1 do cj := (aj+bj+mj) mod 10 mj-1:=(aj+bj+mj) div 10 c0:=m0 mn:=0; for j:=n downto 1 do cj := (aj+bj+mj) mod 10 mj-1:=(aj+bj+mj) div 10 c0:=m0 O(n)
Datastruktur & Algoritmik12 Multiplikation Den gamle skolemetode Multiplikation med 1 ciffer * 5 = Algoritme a1 a2 a3.... an * b = c0 c1 c2.... cn mn:=0; for j:=n downto 1 do cj := (aj*b+mj) mod 10 mj-1:=(aj*b+mj) div 10 c0:=m0 mn:=0; for j:=n downto 1 do cj := (aj*b+mj) mod 10 mj-1:=(aj*b+mj) div 10 c0:=m0 m0m1 m2 m3.. mn Generelt 147 * n mulit med 1 ciffer efterfulgt af n additioner O(n 2 )
Datastruktur & Algoritmik13 Hurtig Multiplication O(n 2 ) til O(n 1.6 ) 53 * * ab * cd b*d a*d b*c a*c xxxxxxxx ab * cd b*d a*d+b*c a*c xxxxxxxxxx a*d+b*c =(a+b)*(c+d)-a*c-b*d kendes Generelt Mult af n-cifrede tal= 3 mult af (n/2)-cifrede tal samt addition af n cifrede tal
Datastruktur & Algoritmik14 3. Master Metode Theorem CLR side 62