Matakuliah Tahun : T0034 / Perancangan & Analisis Algoritma : 2008 Pertemuan 9 DIVIDE AND CONQUER (1) 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, solusisolusi 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 Pelajari ilustrasi 5.4 tentang cara kerja Merge Sort langkah per langkah. [buku utama, ilustrasi 5.5] 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 Bina Nusantara [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] 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 ratarata? • 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 masingmasing teknik pemilihan pivot! Bina Nusantara REVIEW • Apa yang sudah dipahami? • Apa yang akan dibahas selanjutnya? Bina Nusantara
© Copyright 2024 Paperzz