1 / 14

Pertemuan 9 DIVIDE AND CONQUER (1)

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.

Download Presentation

Pertemuan 9 DIVIDE AND CONQUER (1)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Pertemuan 9DIVIDE AND CONQUER (1) Matakuliah : T0034 / Perancangan & Analisis Algoritma Tahun : 2008

  2. 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]

  3. 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)

  4. 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]

  5. 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 PSEUDOCODE MERGE SORT [buku utama, pseudocode 5.4]

  6. ILUSTRASI MERGE SORT Pelajari ilustrasi 5.4 tentang cara kerja Merge Sort langkah per langkah. [buku utama, ilustrasi 5.5]

  7. 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]

  8. 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]

  9. ILUSTRASI QUICK SORT Pelajari bab 5.2.6 tentang cara kerja Quick Sort langkah per langkah. [buku utama, ilustrasi 5.6]

  10. 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

  11. 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.

  12. 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!

  13. REVIEW • Apa yang sudah dipahami? • Apa yang akan dibahas selanjutnya?

More Related