Divide and Conquer (2)

advertisement
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
Download