150 likes | 437 Views
Pertemuan 9 DIVIDE AND CONQUER (1). Matakuliah : T0034 / Perancangan & Analisis Algoritma Tahun : 2008. DIVIDE AND CONQUER. Membagi masalah itu menjadi sejumlah masalah yang lebih kecil. Logikanya : masalah yang lebih sederhana lebih mudah diselesaikan dibandingkan masalah yang rumit.
E N D
Pertemuan 9DIVIDE AND CONQUER (1) Matakuliah : T0034 / Perancangan & Analisis Algoritma Tahun : 2008
DIVIDE 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]
KASUS 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)
MERGE 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]
1 module MergeSort(M) 2 if length(M)<=1 then 3 result=M 4 else 5 iMiddle=length(M) div 2 6 for i=1 to iMiddle do 7 add M[i] to LeftTemp 8 end for 9 for i=(iMiddle+1) to length(M) do 10 add M[i] to RightTemp 11 end for 12 LeftResult=MergeSort(LeftTemp) 13 RightResult=MergeSort(RightTemp) 14 result=Merge2(LeftResult,RightResult) 15 end if 16 end module 1 module Merge2(L,R) 2 Lcnt=1 3 Rcnt=1 4 HasilTemp 5 while (Lcnt<=length(L)) or (Rcnt<=length(R)) do 6 if (Lcnt<=length(L)) and (Rcnt<=length(R)) then 7 if L[Lcnt]<R[Rcont] then 8 add L[Lcnt] to HasilTemp 9 Lcnt=Lcnt+1 10 else 11 add R[Rcnt] to HasilTemp 12 Rcnt=Rcnt+1 13 end if 14 else if Rcnt>length(R) then 15 add L[Lcnt] to HasilTemp 16 Lcnt=Lcnt+1 17 else if Lcnt>length(L) then 18 add R[Rcnt] to HasilTemp 19 Rcnt=Rcnt+1 20 end if 21 end while 22 result=HasilTemp 23 end module PSEUDOCODE MERGE SORT [buku utama, pseudocode 5.4]
ILUSTRASI MERGE SORT Pelajari ilustrasi 5.4 tentang cara kerja Merge Sort langkah per langkah. [buku utama, ilustrasi 5.5]
QUICK 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]
PSEUDOCODE QUICK SORT 1 module QuickSort(Q) 2 if length(Q)<=1 then 3 result=Q 4 else 5 select a pivot value from Q 6 for i=1 to length(Q) do 7 if Q[i]<pivot then 8 add Q[i] to QtempLess 9 else if Q[i]=pivot then 10 add Q[i] to QtempEqual 11 else if Q[i]>pivot then 12 add Q[i] to QtempMore 13 end if 14 end for 15 QresultLess=QuickSort(QtempLess) 16 QresultMore=QuickSort(QtempMore) 17 result=QresultLess,QtempEqual,QresultMore 18 end if 19 end module [buku utama, pseudocode 5.5]
ILUSTRASI QUICK SORT Pelajari bab 5.2.6 tentang cara kerja Quick Sort langkah per langkah. [buku utama, ilustrasi 5.6]
PEMILIHAN 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
VARIASI 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.
LATIHAN • 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!
REVIEW • Apa yang sudah dipahami? • Apa yang akan dibahas selanjutnya?