200 likes | 364 Views
Divide and Conquer. Prinsip Dasar. Membagi n input menjadi k sub set input yang berbeda (1< k < n) Dari k sub set input yang berbeda akan terdapat k subproblem Setiap subproblem mempunyai solusi masing-masing (k sub solusi) Dari k sub solusi akan diperoleh solusi yang optimal yang diharapkan.
E N D
Divide and Conquer Analisa Algoritma
Prinsip Dasar • Membagi n input menjadi k sub set input yang berbeda (1< k < n) • Dari k sub set input yang berbeda akan terdapat k subproblem • Setiap subproblem mempunyai solusi masing-masing (k sub solusi) • Dari k sub solusi akan diperoleh solusi yang optimal yang diharapkan
Jika subproblem masih dianggap besar maka dapat dipecah lagi menjadi sub sub problem yang lebih kecil lagi • Metoda DANDC dapat digunakan lagi secara rekursif • Pemecahan n input menjadi k input sehingga menimbulkan k sub problem dpt dilakukan apabila k subproblem tsb mempunyai sifat yang sama terhadap persoalan semula
N INPUT INPUT 1 INPUT 2 INPUT 3 INPUT k subproblem subproblem subproblem subproblem subsolusi subsolusi subsolusi subsolusi Solusi optimal
Algoritma DANDC Procedure DANDC(p,q) Global n,A(1:N): integer m,p,q If small(p,q) then G(p,q) else m DIVIDE(p,q) COMBINE(DANDC(p,m),DANDC(m+1,q) Endif End DANDC
Small(p,q) adalah fungsi bernilai boole yang menentukan apakah ukuran input (q-p+1) cukup kecil sehingga tak perlu dipecah lagi, jika demikian maka G(p,q) yang diproses, jika tidak maka fungsi DIVIDE(p,q) yg diproses • Fungsi DIVIDE(p,q) menghasilkan bilangan bulat yg menguraikan input menjadi dua bagian. Misalnya input dari p sampai q, dipecah menjadi p:m dan m+1:q • Pecahan tadi menjadi dua subproblem dan menghasilkan dua subsolusi misalnya X dan Y • Fungsi COMBINE(X,Y) merupakan fungsi penentu solusi umum atau yg diharapkan dgn memanfatkan solusi X dan Y.
Algoritma DANDC • Procedure maxmin(I,j,fmax,fmin) • Integer I,j • Global n, A(1:n) • Case • : i=j : fmax <- fmin <- A(i) • : I = j-1 : if A(i) < A(j) • Then fmax <- A(j); fmin <- A(i) • Else fmax <- A(i) ; fmin <- A(j) • Endif • : ELSE mid <- | (i+j)/2 | • CALL maxmin (I,mid,gmax,gmin) • CALL maxmin(mid+1,j, hmax, hmin) • Fmax <- MAX(gmax, hmax) • Fmin <- MIN (gmin, hmin) • Endcase • End maxmin
Procedure straitmaxmin(A,n,max,min) Max min A(1) For i=2 to n do if A(i) > max then max A(i) else if A(i) < min then min A(i) endif endif Endfor End straitmaxmin
BEST CASE Max=2 ; Min=2 i=2 A(2) > max maka max = 4 i=3 A(3) > max maka max = 5 i=4 A(4) > max maka max = 10 Jadi diperoleh min=2 dan max =10 Operasi pembandingan yang dilakukan sebanyak 3 atau (n-1)
Worst case Max=10; min=10 i=2; A(2) > max A(2) < min , mk min=5 i=3; A(3) > max A(3) < min, mk min =4 i=4; A(4) > max A(4) < min, mk min =2 Jadi min=2 max=10 Operasi pembandingan yang dilakukan sebanyak 6 atau 2(n-1)
Average case Rata-rata dari best case dan worst case [(n-1) + 2(n-1) ]/2 = 3/2 (n-1)
1,9 1,5 6,9 1,3 4,5 6,7 8,9 1,2 3,3
60,-8 22,-8 60,17 22,-5 15,8 60,17 47,31 22,13 -5,-5
T(n/2) + T(n/2)+2 ; utk n > 2 T(n) = 1 ; utk n = 2 0 ; utk n = 1
Mergesort Terdapat barisan n input elemen yang ditempatkan dalam sebuah array. Pisahkan n elemen tsb menjadi dua bagian. Jika masing-2 bagian masih terlalu besar, dapat dibagi lagi. Setiap bagian diurutkan, lalu digabungkan dengan bagian lain.
Algoritma mergesort • Terdiri dari dua prosedur yaitu mergesort dan merge • Mergesort utk mengurutkan • Merge utk menggabungkan
Procedure mergesort(low,high) If low < high then mid [ (low+high) / 2] CALL mergesort(low,mid) CALL mergesort(mid+1, high) CALL merge(low, mid, high) Endif End mergesort
Procedure merge(low,mid,high) Hlow; I low; j mid+1 While h <= mid AND j <= high do if A(h)<= A(j) then B(i) A(h) h h+1 else B(i) A(j) j j + 1 endif I < I +1 Repeat
If h > mid then for k j to high do B(i) A(k) I I +1 repeat else for k h to mid do B(i) A(k) I I +1 repeat Endif For k low to high do A(k) B(k) Repeat End merge