Algoritma Divide and Conquer (DandC)
Dr. D. L. Crispina Pardede, D.E.A.
Dr. Ricky Agus Tjiptanata, S.T., S.Si., M.M.
Masalah Pencarian:
Bilangan Max dan Min
3
Algoritma DANDC secara umum
2
Pengertian DANC
1
4
Penerapan DANDC
5
pada masalah Pengurutan:
Merge Sort
6
LINGKUP MATERI
Penerapan DANDC pada masalah
Pengurutan:
Quick Sort
Penerapan DANDC pada masalah
Pencarian:
MaxMin
D ivide and C
dikenal sebagai strategi militer yang menerapkan teknik pecah belah ( divide )
untuk memenangi ( impera ) .
Strategi ini kemudian menjadi strategi fundamental dalam ilmu komputer dengan nama
onquer
DEFINISI
Divide : membagi masalah menjadi beberapa sub-masalah yang memiliki sifat yang sama dengan masalah
semula namun berukuran lebih kecil (idealnya berukuran hampir sama).
Conquer : memecahkan (menyelesaikan) masing-masing sub- masalah (secara rekursif).
Combine: menggabungkan solusi masing-masing sub-masalah
sehingga membentuk solusi bagi masalah semula.
Pengertian Divide and Conquer (DANDC)
Divide and Conquer (DandC) mengandung arti Pemecahbelahan.
Dalam hal ini, yang dipecahkan adalah ukuran data dari suatu masalah yang ingin diselesaikan.
DandC ini merupakan strategi desain algoritma yang paling terkenal, yang tahapannya adalah sebagai berikut :
1. Bagi masalah menjadi dua atau lebih sub masalah yang lebih kecil (fokusnya pada ukuran data)
2. Selesaikan/solusikan sub masalah yang lebih kecil secara rekursif
3. Dapatkan solusi untuk masalah asli (lebih besar) dengan menggabungkan solusi dari sub masalah tersebut
Ilustrasi Teknik Divide and Conquer
Sub masalah 2 dengan ukuran n/2 Sub masalah 1
dengan ukuran n/2
Solusi dari Sub masalah 1
Solusi dari
masalah awal (semula)
Solusi dari Sub masalah 2 Sebuah masalah
dengan ukuran n
Umumnya menggunakan algoritma rekursif.
Teknik Divide and Conquer dapat dipahami seperti berikut ini:
Metode Divide and conquer :
Jika ukuran masalah cukup kecil, langsung diselesaikan.
Jika tidak:
• Pecahkan (Divide): Pecahkan masalah menjadi dua atau lebih sub masalah yang terpisah
• Solusikan (Conquer): solusikan sub masalahnya
• Gabungkan (Combine): Gabungkan solusi dari sub masalah-sub masalah tersebut sehingga diperoleh solusi dari masalah awal
(semula)
Sebanyak n input dipartisi menjadi k subset input yang berbeda (1< k n) k subproblem
k subproblem k subsolusi solusi SKEMA UMUM
METODE DANDC
Algoritma Divide and Conquer (DandC) Secara Umum
PROCEDURE DANDC(p,q)
GLOBAL n,A(1:n); INTEGER m.p.q IF SMALL(p,q) THEN G(p,q)
ELSEM DIVIDE(p,q)
COMBINE(DANDC(p,m),DANDC(m+1,q)) ENDIF
END DANDC SMALL(p,q) adalah fungsi yang bernilai boole yang
menentukan apakah input q-p+1 berukuran cukup kecil sedemikian sehingga solusi dapat dihitung tanpa
pemecahan. Jika demikian halnya, maka fungsi G(p,q) yang dipanggil.
Pada keadaan lain fungsi DIVIDE(p,q) yang dipanggil.
Fungsi DIVIDE(p,q) menghasilkan integer yang menguraikan input menjadi 2 bagian. Misal m = DIVIDE(p,q), maka input dipecah menjadi A(p:m) dan A(m+1,q)
Jika sub masalah masih relatif cukup besar,
maka metode DANDC dapat digunakan lagi untuk keadaan tersebut.
Pemakaian ulang DANDC dinyatakan dengan teknik rekursif.
Pemecahan menjadi k subproblem ini menunjukkan bahwa ia mempunyai sifat yang sama dengan problem aslinya (awalnya).
Metode DANDC biasa dipakai pada searching dan sorting.
Masalah Pencarian: Bilangan Max dan Min
Algoritma iteratif untuk menentukan Bilangan Max dan Min PROCEDURE STRAITMAXMIN
INTEGER i,n
max min A(1) For i 2 TO n DO
IF A(i) > max THEN max A(i) ……… bagian perbandingan ELSE IF A(i) < min THEN min A(i) ……… bagian perbandingan ENDIF
ENDIF REPEAT
END STRAITMAXMIN
Procedure STRAITMAXMIN tersebut akan menghasilkan 3 keadaan, yakni:
-. Best Case: bila data tersusun menaik, dengan banyak perbandingan adalah n-1 -. Worst Case: bila data tersusun menurun, dengan banyak perbandingan adalah
2(n-1)
-. Average Case: bila data tidak tersusun menaik ataupun menurun, dengan banyak perbandingan adalah 3(n-1)/2
Bila bagian perbandingan pada procedure STRAITMAXMIN diubah menjadi : IF A(i) > max THEN max A(i) ENDIF
IF A(i) < min THEN min A(i) ENDIF
Maka Best Case = Worst Case = Average Case = 2(n-1)
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
Penerapan DANDC
pada masalah Pencarian: MaxMin
CONTOH
A = { 22, 13, -5, -8, 15, 60, 17, 31, 47 }
simulasi dari procedure MAXMIN tersebut adalah:
Jadi outputnya adalah max = 60 dan min = -8
untuk n power value dari 2 = 2k dan k integer positif, maka :
T(n) = 2 T(n/2) + 2
= 2 (2 T(n/4) + 2) + 2
= 4 T(n/4) + 4 + 2 = 22 T(n/22) + 22 + 2
= 23 T(n/23) + 23 + 22 + 2 ..
.
= 2k-1 T(2) + 2k-1 + 2k-2 + … + 23 + 22 + 2
= 2k-1 +2k - 2
= 3n/2 - 2
Jadi T(n) = (n) Jumlah perbandingan elemennya, yang
direpresentasikan oleh T(n) adalah :
Pengurutan ( Sorting )
Untuk mengurutkan barisan n input elemen yang ditempatkan dalam suatu array.
Urutan yang diinginkan adalah urutan yang tidak turun (non decreasing).
Contoh barisan dengan urutan :
1. Menaik : 5, 8, 10, 12, 15, 16 2. Menurun : 20, 17, 15, 14, 12, 10 3. Tidak turun : 5, 9, 10, 12, 12, 15, 16 4. Tidak naik : 16, 15, 15, 12, 10, 8
Dari Metode Sorting yang ada, akan dibahas metode merge sort dan quick sort.
Penerapan DANDC
pada masalah Pengurutan: Merge Sort
Algoritma dari Merge Sort terdiri dari dua prosedur:
prosedur MERGESORT dan prosedur MERGE.
Kedua prosedur tersebut tidak dapat dipisahkan satu dengan yang lainnya (terintegrasi).
PROCEDURE MERGESORT(low,high) INTEGER 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) INTEGER h,I,j,k,low,mid,high
GLOBAL A(low:high); LOCAL B(low:high) h low; j mid + 1; i low
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 B(k) A(k)
REPEAT
END MERGE
CONTOH
A(1:10) yakni:
A = { 310, 285, 179, 652, 351, 423, 861, 254, 450, 520 } Representasi di dalam tree dari CALL MERGESORT sbb :
CONTOH
A(1:10) yakni:
A = { 310, 285, 179, 652, 351, 423, 861, 254, 450, 520 } Representasi di dalam tree dari CALL MERGE sbb:
T(n) = (n 2log n)
Penerapan DANDC
pada masalah Pengurutan: Quick Sort
Algoritma Quick Sort terdiri dari dua prosedur:
prosedur PARTITION dan prosedur QUICKSORT.
PROCEDURE QUICKSORT(p,q) IF p < q THEN
j q+1
CALL PARTITION(p,j)
CALL QUICKSORT(p,j-1) CALL QUICKSORT(j+1,q) ENDIF
END QUICKSORT
PROCEDURE PARTITION(m,p)
INTEGER m,p,i; GLOBAL A(m-1,p) V A(m); i m
LOOPLOOP i i+1 UNTIL A(i) V REPEAT LOOP p p-1 UNTIL A(p) V REPEAT
IF i < p THEN CALL INTERCHANGE(A(i),A(p)) ELSE EXIT
REPEAT
A(m) A(p); A(p) V END PARTITION
CONTOH :
Suatu array A berisi elemen-elemen :
i p 1 2 3 4 5 6 7 8 9 10
65 70 75 80 85 60 55 50 45 +
2 9 65 45 75 80 85 60 55 50 70 +
3 8 65 45 50 80 85 60 55 75 70 +
4 7 65 45 50 55 85 60 80 75 70 +
5 6 65 45 50 55 60 85 80 75 70 +
6 5 60 45 50 55 65 85 80 75 70 +
5 4 55 45 50 60 65 85 80 75 70 +
4 3 50 45 55 60 65 85 80 75 70 +
3 2 45 50 55 60 65 85 80 75 70 +
10 9 45 50 55 60 65 70 80 75 85 +
7 6 45 50 55 60 65 70 80 75 85 +
9 8 45 50 55 60 65 70 75 80 85 +
Analisisnya :
Worst Case = (n2)
Average Case = (n log n)
Hasil tracenya adalah sebagai berikut:
65 70 75 80 85 60 55 50 45
1 2 3 4 5 6 7 8 9
Daftar Pustaka
Suryadi, M.T. Pengantar Analisis Algoritma, Jakarta: Gunadarma Rinaldi Munir, Diktat Kuliah Strategi Algoritma Bandung:ITB
A. Levitin “Introduction to the Design & Analysis of Algorithms,” 2nd ed., Ch. 4