Design and Analysis of ALGORITHM (Session 3) DR. Gatot F. Hertono, MSc. Design and Analysis of ALGORITHM (Session 3)
Rekursif Bentuk rekursif banyak digunakan di dalam rancangan suatu algoritma Suatu fungsi rekursif f(x): adalah suatu fungsi dimana evaluasi untuk suatu input xi (xi bukan initial input x0) memerlukan evaluasi fungsi dirinya sendiri untuk input xj yang lain. Contoh: Fact(n) = n * Fact(n-1), dengan kondisi awal: Fact(1) = 1 Fibo(n) = Fibo(n-1)+Fibo(n-2), dengan kondisi awal: Fibo(0)=0, Fibo(1)=1 Gcd(a,b)=Gcd(b,a mod b), dengan kondisi awal: Gcd(a,0) = a
Top-Down dan Bottom-Up Strategi Top-Down dan Bottom-Up pada struktur rekursif Function Fib1(n) recursive Input: n (n 0) Output: Bilangan Fibonacci ke-n if n 1 then return(n) else return(Fib1(n-1) + Fib1(n-2)) endif end Fib1 Function Fib2(n) Prev:=0; Curr:=1 for i:=2 to n do Next := Prev + Curr; Prev:=Curr; Curr := Next; endfor return(Curr) end Fib2
Top-Down vs Bottom-Up 5 5 4 3 4 + 3 2 2 1 3 + 2 1 1 1 2 + 1 1 + 1 2 + 1 1 + Top-Down Bottom-Up
Recurrence Relations Recurrences are a major tool for analysis of algorithms Beberapa algoritma dapat memiliki versi rekursif: Mis. Binary search, Insertion sort & Merge sort Analisa kompleksitas algoritma rekursif lebih rumit. Running time berupa recurrence relations Contoh: kompleksitas Merge sort Yang memiliki solusi: T(n) = (n log n)
Recurrence Relations (cont.)
Recurrence Relations (cont.) Homogen f(n)=0 Linear Recurrence t(n)= c1.t(n-1) + c2.t(n-2)+…+ ck.t(n-k) + f(n), c1, c2, …, ck 0 konstanta non-homogen f(n)0 Recurrence Relation f(n) = c Non-Linear Recurrence (e.q. from divide and conquer) f(n) = c.n
Linear Recurrence First-order : t(n) = c.t(n-1) + f(n), n > 0, c0 positif konstanta, dan suatu fungsi f(n) tertentu. Initial cond. t(0) = d0 Higher-order : t(n)= c1.t(n-1) + c2.t(n-2)+…+ ck.t(n-k) + f(n), c1, c2, …, ck 0 konstanta k-th order Initial cond. t(0) = d0 , … , t(k-1) = dk-1 Suatu linier recurrence dikatakan homogeneous bila f(n) = 0, n
Metode penyelesaian First-order linear homogeneous: t(n) = c.t(n-1), n > 0 dan t(0) = d0 solution : t(n) = d0.cn , n 0 Solusi: t(n)= 5.3n Contoh: t(n) = 3.t(n-1), t(0) = 5 First-order linear nonhomogeneous: t(n) = c.t(n-1) + f(n), n > 0 dan t(0) = d0 solution : Contoh: W(n) = W(n-1) + (n-1), init. cond. W(1)= 0 Solusi:
Metode Penyelesaian (lanj.) Recurrence relation yang muncul dari suatu teknik algoritma divide-and-conquer : Solusi: Jika f(n) = c Jika f(n) = c.n
Metode Penyelesaian (lanj.) Sebuah fungsi h(n) dikatakan eventually non-decreasing bila Proposisi: Bila t(n) adalah fungsi eventually non-decreasing dan berbentuk: t(n) = a.t(n/b)+c, dengan init.cond. t(1)=c1 , a,b,c, c1 konstanta positif dan b > 1, maka:
Metode Penyelesaian (lanj.) 2. Bila t(n) adalah fungsi eventually non-decreasing dan berbentuk: t(n) = a.t(n/b)+c.n, dengan init.cond. t(1)=c1 , a,b,c, c1 konstanta positif dan b > 1, maka: Contoh: worst case untuk Merge-sort Solusi W(n) ? W(n) (?) W(n) = W(n/2)+1, W(1) = 1
Rekursif Homogen
Rekursif Homogen (cont.) Persamaan karakteristik dengan semua akar berbeda Persamaan karakteristik dengan beberapa akar sama
Rekursif Homogen (cont.)
Rekursif Homogen (cont.)
Rekursif Homogen (cont.)
Rekursif Inhomogen
Recursive Divide and Conquer
Metode Penyelesaian Lainnya Metode substitusi Metode iterasi Metode master Metode penyelesaian yang lain: Master Theorem (see Cormen): Misal a 1, b 1 adalah konstanta, dan f(n) adalah suatu fungsi. Misalkan t(n) adalah suatu recurrence relation berbentuk t(n) = a.t(n/b) + f(n) Maka t(n) memiliki batas-batas asymptot sbb: Jika f(n)=O(n logb a-), untuk beberapa >0, maka t(n)=(n logb a). Jika f(n)=(n logb a), maka t(n)=(n logb a log n). Jika f(n)=(n logb a+) , untuk beberapa >0, dan jika a.f(n/b) c.f(n), untuk c < 1, maka t(n)= (f(n)).
Master theorem (contoh) t(n)=9.t(n/3) + n a=9, b=3, f(n)=n=O(nlog39 - ), =1 t(n)=(n2). t(n)=t(2n/3)+1 a=1, b=3/2, f(n)=1 t(n)=(log n). t(n)=3.t(n/4)+n log n t(n) = ?