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 subsolusi subsolusi subsolusi 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
Carilah min dan max nya 1 2 3 4 5 6 7 8 9 22 13 -5 -8 15 60 17 31 47
Procedure straitmaxmin(A,n,max,min) For i=2 to n do if A(i) > max then max A(i) else if A(i) < min then min A(i) endif Endfor End straitmaxmin
i=2 A(2) > max maka max = 4 i=3 A(3) > max maka max = 5 BEST CASE 2 4 5 10 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)
10 5 4 2 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
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) Endif For k low to high do A(k) B(k) Repeat End merge