pertemuan 9 divide and conquer (1)
DESCRIPTION
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. - PowerPoint PPT PresentationTRANSCRIPT
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) do10 add M[i] to RightTemp11 end for12 LeftResult=MergeSort(LeftTemp)13 RightResult=MergeSort(RightTemp)14 result=Merge2(LeftResult,RightResult)15 end if16 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+110 else11 add R[Rcnt] to HasilTemp12 Rcnt=Rcnt+113 end if14 else if Rcnt>length(R) then15 add L[Lcnt] to HasilTemp16 Lcnt=Lcnt+117 else if Lcnt>length(L) then18 add R[Rcnt] to HasilTemp19 Rcnt=Rcnt+120 end if21 end while22 result=HasilTemp23 end module
[buku utama, pseudocode 5.4]
Bina Nusantara
ILUSTRASI MERGE SORT
[buku utama, ilustrasi 5.5]
Pelajari ilustrasi 5.4tentang cara kerjaMerge Sortlangkah 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 then10 add Q[i] to QtempEqual11 else if Q[i]>pivot then12 add Q[i] to QtempMore13 end if14 end for15 QresultLess=QuickSort(QtempLess)16 QresultMore=QuickSort(QtempMore)17 result=QresultLess,QtempEqual,QresultMore18 end if19 end module [buku utama, pseudocode 5.5]
Bina Nusantara
ILUSTRASI QUICK SORT
[buku utama, ilustrasi 5.6]
Pelajari bab 5.2.6tentang cara kerjaQuick Sortlangkah 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?