Matakuliah Tahun : T0034 / Perancangan & Analisis Algoritma : 2008 Pertemuan 10 DIVIDE AND CONQUER (2) SELECTION SORT • Mengurutkan sederetan bilangan dengan cara : – – – – Cari bilangan terkecil, tempatkan di posisinya Cari bilangan kedua terkecil, tempatkan di posisinya Cari bilangan ketiga terkecil, tempatkan di posisinya dst • Sebuah list sepanjang N akan selesai diurutkan dalam N-1 langkah. [buku utama, bab 3.2 dan bab 5.2.1] Bina Nusantara PSEUDOCODE SELECTION SORT 1 for i=1 to N-1 do 2 min=i 3 for j=i+1 to N do 4 if A[j]<A[min] then 5 min=j 6 end if 7 end for 8 swap(A[i],A[min]) 9 end for [buku utama, pseudocode 3.6] Bina Nusantara ALUR SELECTION SORT • Misalkan kita akan mengurutkan bilangan 16, 22, 25, 3, 9, 12 dan 23 dengan teknik Selection Sort 16 22 25 3 9 12 23 3 22 25 16 9 12 23 3 9 25 16 22 12 23 3 9 12 16 22 25 23 3 9 12 16 22 25 23 3 9 12 16 22 25 23 3 9 12 16 22 23 25 3 9 12 16 22 23 25 [buku utama, bab 3.2] Bina Nusantara KOMPLEKSITAS ALGORITMA n ( n 1) 2 • Selection Sort f ( n) • Merge Sort Θ(n log n) • Quick Sort Θ(n log n) Bina Nusantara (n 2 ) SELECTION vs MERGE vs QUICK • Quicksort Θ(n log n) • Selection sort Θ(n2) • Tentu sudah jelas Quicksort lebih baik • Tapi bagaimana dengan Merge Sort yang sama-sama memiliki Θ(n log n)? • Apakah bisa dibandingkan dengan teori Big-Oh? • Fact : – Pada umumnya Quicksort lebih cepat daripada Mergesort – Kenapa teori Big-Oh menghasilkan nilai Theta yang sama? Bina Nusantara PENCARIAN DATA (SEARCH) • Misalkan kita memiliki sederetan bilangan [2,45,8,9,32,15,27] dan ingin mencari apakah terdapat angka 8 di deretan tersebut. • Sequential Search – Teknik paling dasar dalam pencarian – Algoritma perlu memeriksa satu per satu isi deret dan membandingkannya dengan angka 8 yang dicari – Melakukan pencarian secara berurutan (sequence) – Apabila sampai seluruh isi array telah dibandingkan dan data yang dicari belum ditemukan, berarti pencarian gagal – Sequential search bersifat fleksibel karena bisa dipakai dalam kondisi apa saja, isi array tidak harus dalam keadaan berurut – Kompleksitasnya Ο(n) [buku utama, bab 5.3] Bina Nusantara BINARY SEARCH • Karakteristik Binary Search – Merupakan teknik pencarian data secara Divide and Conquer – Isi array harus dalam keadaan berurut – Langkah-langkah : • Misalkan kita akan mencari data X di dalam array A • Tentukan Ak dimana Ak adalah elemen yang terletak tepat di tengah array A • Jika X = Ak, data ditemukan set j = k • Jika X < Ak, maka cari ke kiri ak, lakukan perulangan rekursif • Jika X > Ak, maka cari ke kanan ak, lakukan perulangan rekursif • Jika X tidak ditemukan set j = 0, data yang dicari tidak ada • Kompleksitas algoritma Binary Search adalah Ο(log2 n) Bina Nusantara PSEUDOCODE BINARY SEARCH 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 A=[2,8,9,15,27,32,45] display "Angka yang dicari ? " read X iLow=1 iHigh=N Hasil=0 while (Hasil=0) and (iLow<=iHigh) do iMid=(iLow+iHigh) div 2 if A[iMid]=X then Hasil=iMid else if A[iMid]>X then iHigh=iMid-1 else if A[iMid]<X then iLow=iMid+1 end if end while if Hasil>0 then display "Angka ",X," ada di urutan ke-",Hasil,NL else display "Angka ",X," tidak ditemukan",NL end if Bina Nusantara [buku utama, pseudocode 5.7] Pelajari cara kerja Binary Search langkah per langkah di bab 5.3 LATIHAN • Jelaskan langkah-langkah mengurutkan bilangan 34, 15, 23, 9, 41, 26, 39, 11, 7, 28 dengan Selection Sort! • Jelaskan langkah-langkah mencari bilangan 15 dari list 7, 9, 11, 15, 23, 26, 28, 34, 39, 41 dengan Binary Search! Bina Nusantara REVIEW • Apa yang sudah dipahami? • Apa yang akan dibahas selanjutnya? Bina Nusantara