Title: Divide and Conquer (1)
1(No Transcript)
2Pertemuan 9DIVIDE AND CONQUER (1)
Matakuliah T0034 / Perancangan Analisis
Algoritma Tahun 2008
3DIVIDE AND CONQUER
- Membagi masalah itu menjadi sejumlah masalah yang
lebih kecil. - Logikanya masalah yang lebih sederhana lebih
mudah diselesaikan dibandingkan masalah yang
rumit. - Pembagian masalah menjadi sub-masalah terjadi
terus menerus secara rekursif hingga masalah
tidak dapat dibagi lagi (sampai pada bentuk
terkecil). - Setelah semua sub-masalah selesai dipecahkan,
solusi-solusi dari sub-masalah akan digabungkan
kembali untuk menghasilkan solusi dari problem
lengkap. - buku utama, bab 5.1
4KASUS DIVIDE AND CONQUER
- Tidak semua kasus bisa dipecahkan dengan teknik
Divide and Conquer (DaC) - Kasus yang terkenal dengan pemecahan secara DaC
adalah - Pengurutan data (sorting)
- Pencarian data (searching)
5MERGE SORT
- Mengurutkan sederetan bilangan dengan cara
- Bagi array A menjadi array A1 dan A2
(masing-masing berisi setengah dari A). - Bagi array A1 menjadi array A11 dan A12 bagi
array A2 menjadi array A21 dan A22 dan
seterusnya (lakukan secara rekursif sampai
didapatkan sebuah array yang panjangnya hanya nol
atau satu elemen). - Masing-masing array diurutkan.
- Array yang panjangnya hanya 1 elemen ini tentu
tidak perlu diurutkan lagi karena sudah otomatis
terurut. - Gabungkan hasilnya.
- buku utama, bab 5.2.5
6PSEUDOCODE MERGE SORT
- 1 module MergeSort(M)
- 2 if length(M)lt1 then
- 3 resultM
- 4 else
- 5 iMiddlelength(M) div 2
- 6 for i1 to iMiddle do
- 7 add Mi to LeftTemp
- 8 end for
- 9 for i(iMiddle1) to length(M) do
- 10 add Mi to RightTemp
- 11 end for
- 12 LeftResultMergeSort(LeftTemp)
- 13 RightResultMergeSort(RightTemp)
- 14 resultMerge2(LeftResult,RightResult)
- 15 end if
- 16 end module
- 1 module Merge2(L,R)
- 2 Lcnt1
- 3 Rcnt1
- 4 HasilTemp
- 5 while (Lcntltlength(L)) or (Rcntltlength(R))
do - 6 if (Lcntltlength(L)) and (Rcntltlength(R))
then - 7 if LLcntltRRcont then
- 8 add LLcnt to HasilTemp
- 9 LcntLcnt1
- 10 else
- 11 add RRcnt to HasilTemp
- 12 RcntRcnt1
- 13 end if
- 14 else if Rcntgtlength(R) then
- 15 add LLcnt to HasilTemp
- 16 LcntLcnt1
- 17 else if Lcntgtlength(L) then
- 18 add RRcnt to HasilTemp
- 19 RcntRcnt1
buku utama, pseudocode 5.4
7ILUSTRASI MERGE SORT
Pelajari ilustrasi 5.4 tentang cara kerja Merge
Sort langkah per langkah.
buku utama, ilustrasi 5.5
8QUICK SORT
- Mengurutkan sederetan bilangan dengan cara
- Pilih sebuah nilai tengah yang disebut pivot.
- Nilai pivot ini bisa ditentukan dengan berbagai
cara, salah satunya adalah dengan mengambil nilai
paling depan dari array. - Pisahkan array menjadi 3 bagian (array less,
equal dan more) untuk diproses secara rekursif. - Array less berisi semua elemen yang lebih kecil
dari pivot. - Array equal berisi elemen yang bernilai sama.
- Array more berisi semua elemen yang bernilai
lebih besar. - Urutkan array less dan array more secara
rekursif. - Gabungkan hasilnya.
- buku utama, bab 5.2.6
9PSEUDOCODE QUICK SORT
- 1 module QuickSort(Q)
- 2 if length(Q)lt1 then
- 3 resultQ
- 4 else
- 5 select a pivot value from Q
- 6 for i1 to length(Q) do
- 7 if Qiltpivot then
- 8 add Qi to QtempLess
- 9 else if Qipivot then
- 10 add Qi to QtempEqual
- 11 else if Qigtpivot then
- 12 add Qi to QtempMore
- 13 end if
- 14 end for
- 15 QresultLessQuickSort(QtempLess)
- 16 QresultMoreQuickSort(QtempMore)
- 17 resultQresultLess,QtempEqual,QresultMore
- 18 end if
- 19 end module
buku utama, pseudocode 5.5
10ILUSTRASI QUICK SORT
Pelajari bab 5.2.6 tentang cara kerja Quick
Sort langkah per langkah.
buku utama, ilustrasi 5.6
11PEMILIHAN PIVOT
- Nilai di posisi paling depan
- Nilai di posisi tengah
- Nilai di posisi paling belakang
- Nilai tengah (median) dari 3 nilai (posisi paling
depan, posisi tengah dan posisi paling belakang) - Mengapa digunakan nilai median bukannya nilai
rata-rata? - Nilai random
12VARIASI ALGORITMA QUICK SORT
- Algoritma Quick Sort yang dijelaskan di sini
adalah algoritma dasar - Banyak versi lain dari algoritma Quick Sort yang
merupakan penyempurnaan dari algoritma dasar ini.
13LATIHAN
- Jelaskan langkah-langkah mengurutkan bilangan 34,
15, 23, 9, 41, 26, 39, 11, 7, 28 dengan Merge
Sort! - Jelaskan langkah-langkah mengurutkan bilangan 34,
15, 23, 9, 41, 26, 39, 11, 7, 28 dengan Quick
Sort! - Jelaskan keunggulan dan kelemahan masing-masing
teknik pemilihan pivot!
14REVIEW
- Apa yang sudah dipahami?
- Apa yang akan dibahas selanjutnya?