Matakuliah: T0034 / Perancangan & Analisis Algoritma Tahun: 2008 Pertemuan 9 DIVIDE AND CONQUER (1)
Bina Nusantara 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]
Bina Nusantara 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)
Bina Nusantara 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]
Bina Nusantara PSEUDOCODE MERGE SORT 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 [buku utama, pseudocode 5.4]
Bina Nusantara ILUSTRASI MERGE SORT [buku utama, ilustrasi 5.5] Pelajari ilustrasi 5.4 tentang cara kerja Merge Sort langkah per langkah.
Bina Nusantara 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]
Bina Nusantara 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]
Bina Nusantara ILUSTRASI QUICK SORT [buku utama, ilustrasi 5.6] Pelajari bab tentang cara kerja Quick Sort langkah per langkah.
Bina Nusantara 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
Bina Nusantara 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.
Bina Nusantara 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!
Bina Nusantara REVIEW Apa yang sudah dipahami? Apa yang akan dibahas selanjutnya?