download

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