Definisi
Divide: membagi persoalan menjadi beberapa
sub-masalah yang memiliki kemiripan dengan
persoalan semula namun berukuran lebih kecil
(idealnya berukuran hampir sama),
Conquer (solve): memecahkan (menyelesaikan)
masing-masing sub-masalah.
Combine: mengabungkan solusi masing-masing
sub-masalah sehingga membentuk solusi
persoalan semula.
6
g (n)
, n n0
T (n)
2T ( n / 2) f ( n ) , n n0
10
11
12
13
T(n) = (n 1) + (n 1) = 2n 2 = O(n)
14
12
23
21
35
24
12
23
21
35
24
35
24
24
24
DIVIDE
4
12
23
21
21
1
35
min = 1
maks = 35
COMBINE
4
12
23
min = 1
maks = 35
21
35
15
16
12
23
21
35
24
12
23
21
35
24
12
23
21
35
24
35
min = 4
maks = 12
12
min = 9
maks = 23
min = 1
maks = 21
min = 35
maks =35
min = 2
maks = 24
23
21
35
24
12
23
min = 4
maks = 23
12
23
min = 4
maks = 23
12
min = 1
maks = 35
21
min = 1
maks = 21
min = 2
maks = 35
21
35
24
24
24
min = 1
maks = 35
23
21
18
19
Tugas 1
Transalasi kode pseuducode pada selide
sebelumnya ke kode C++
20
Binary search
Dalam proses pencarian, kita perlukan perlu
dua indeks array, yaitu indeks terkecil dan
terbesar
Contoh data yang terurut dalam array
13
14
15
16
21
76
Binary search
Algoritma binary search adalah sbb:
Langkah 1:
Bagi dua elemen array pada elemen tengah
Elemen tengah adalah elemen dengan indeks k = (i+j) div 2
Elemen tengah membagi array menjadi dua bagian, yaitu
bagian kiri L[i..k] dan bagian kanan L[k+1..j]
Langkah 2:
Periksa apakah nilai tengh L[k] = x data yang dicari?
Jika L[k] = x, pencarian selesai
Tetapi jika L[k] x, harus ditentukan apakah pencarian
dilakukan pada array sebelah kiri atau kanan
Jika L[k] < x maka pencarian dilakukan lagi pada bagian kanan
Sebaliknya, jika L[k] > x pencarian dilakukan di bagian kiri
23
14
15
16
21
76
i=1
6=j
14
15
16
21
76
Langkah 2:
Perbandingan L[3] = 15? Ya! (x ditemukan, pencarian selesai)
24
14
15
16
21
76
i=1
6=j
14
15
16
21
76
Langkah 2:
Perbandingan L[3] = 14? Tidak! Harus diputuskan apakah pencarian
akan dilakukan di bagian kiri atau kanan dengan pemeriksaan sbb:
25
Perbandingan: L[3] > 14? Ya! Lakukan pencarian pada array bagian
kiri dengan i = 1 (tetap) dan j = k 1 = 2
13
14
Langkah 3:
i = 1 dan j = 2
Indeks elemen tengah k = (1+2) DIV 2 = 1 (elemen yang berwarna)
13
14
Langkah 4:
Perbandingan L[1] = 14? Tidak! Harus diputuskan apakah pencarian
akan dilakukan di bagian kiri atau kanan dengan pemeriksaan sbb:
26
Perbandingan: L[1] > 14? Tidak! Lakukan pencarian pada array bagian kanan
dengan i = k+1 = 2 dan j = 2 (tetap)
14
2
Langkah 5:
i = 2 dan j = 2
Indeks elemen tengah k = (2+2) DIV 2 = 2 (elemen yang berwarna)
14
Langkah 6:
Perbandingan L[2] = 14? Ya! (x ditemukan, pencarian selesai)
Binary search
function binarySearch (input a: array, input x:
integer, input left, input right)integer
DEKLARASI
mid: integer
ALGORITMA
if(right < left)
return 0
mid =(left + right)div 2
if (a[mid] = x)
return mid
if (x < a[mid])
return binarySearch(a,x,left,mid);
else
return binarySearch(a,x,mid+1,right);
28
Sequential Search
Dapat digunakan pada data
belum dan sudah terurut
Kompleksitas waktu O(n)
Kinerja pencarian untuk
kasus terburuk, memerlukan
waktu yang sebanding
dengan banyak data
Lebih sesuai digunakan
untuk pencarian pada
jumlah data yang kecil
29
Tugas 2
Transalasi kode pseuducode binary search
ke kode C++
30
Binary search
function binarySearch (input L:array, input n:integer, input
x:integer)integer
{mengembalikan indeks array L[1..n] yang mengandung nilai x,jika x tidak
ditemukan nilai indeks 0}
DEKLARASI
i,j,k : integer
ketemu : boolean
ALGORITMA:
i1
{ujung kiri array}
jn
{ujung kanan aray}
ketemu false
{asumsikan x belum ditemukan}
while(not ketemu) and (i j) do
k i+j)div 2
{bagi dua array L pada posisi k}
if (L[k]= x) then
ketemu true
else
{L[k] x}
if (L[k]> x) then
j k-1
{pencarian pada array bagian kiri}
else
i k+1
{pencarian pada array bagian kanan}
endif
endif
endwhile {ketemu = true or i > j}
if ketemu then
return k
else
return 0
endif
31
Tugas 2
Berdasarkan algoritma DnC binary search iteratif pada slide
sebelumnya, disainlah program komputer permainan tebaktebakan dimana komputer harus menebak sebuah bilangan bulat
positif yang dipilih oleh pemain lain di antara 1 dan N, dengan
memanfaatkan jawaban pertanyaan berupa Y untuk ya dan T
untuk tidak.
Misalnya N adalah 16 dan angka yang dipilih adalah 11,
permainan dapat berjalan sebagai berikut.
Apakah angka lebih besar dari 8? (Y)
Apakah angka lebih besar dari 12? (T)
Apakah angka lebih besar dari 10? (Y)
Apakah angkat lebih besar dari 11? (T)
Sehingga, angka tersebut pasti 11.
32
Tugas 3
2.
3.
4.
5.