pertemuan 9 divide and conquer (1)

14

Upload: anika-valencia

Post on 30-Dec-2015

70 views

Category:

Documents


7 download

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 Presentation

TRANSCRIPT

Page 1: Pertemuan 9 DIVIDE AND CONQUER (1)
Page 2: Pertemuan 9 DIVIDE AND CONQUER (1)

Matakuliah : T0034 / Perancangan & Analisis Algoritma

Tahun : 2008

Pertemuan 9

DIVIDE AND CONQUER (1)

Page 3: 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]

Page 4: Pertemuan 9 DIVIDE AND CONQUER (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)

Page 5: Pertemuan 9 DIVIDE AND CONQUER (1)

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]

Page 6: Pertemuan 9 DIVIDE AND CONQUER (1)

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]

Page 7: Pertemuan 9 DIVIDE AND CONQUER (1)

Bina Nusantara

ILUSTRASI MERGE SORT

[buku utama, ilustrasi 5.5]

Pelajari ilustrasi 5.4tentang cara kerjaMerge Sortlangkah per langkah.

Page 8: Pertemuan 9 DIVIDE AND CONQUER (1)

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]

Page 9: Pertemuan 9 DIVIDE AND CONQUER (1)

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]

Page 10: Pertemuan 9 DIVIDE AND CONQUER (1)

Bina Nusantara

ILUSTRASI QUICK SORT

[buku utama, ilustrasi 5.6]

Pelajari bab 5.2.6tentang cara kerjaQuick Sortlangkah per langkah.

Page 11: Pertemuan 9 DIVIDE AND CONQUER (1)

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

Page 12: Pertemuan 9 DIVIDE AND CONQUER (1)

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.

Page 13: Pertemuan 9 DIVIDE AND CONQUER (1)

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!

Page 14: Pertemuan 9 DIVIDE AND CONQUER (1)

Bina Nusantara

REVIEW

• Apa yang sudah dipahami?• Apa yang akan dibahas selanjutnya?