Anda di halaman 1dari 17

SEARCHING

-YQ-
Beberapa metode pencarian:
Pencarian secara beruntun (sequential atau
linier search)
Pencarian dengan teknik sentinel
Pencarian bagi dua (binary search) Pencarian bagi dua (binary search)
Pencarian berbasis fungsi hash
Sequential searc
Pencarian secara beruntun dilakukan dengan
memeriksa elemen larik satu per satu mulai
dari indeks = 1 hingga indeks dimana elemen
yang dicari tersebut ditemukan. yang dicari tersebut ditemukan.
Jika indeks maksimum telaj dilampaui maka
elemen yang dicari tersebut tidak ditemukan.
Contoh
!arik " = #$% 1& 1' (& )% $*+
, = 1'
Jika " diperiksa dari indeks =1 maka , akan Jika " diperiksa dari indeks =1 maka , akan
ditemukan pada indeks = (- tetapi jika , = )&
maka pencarian tidak akan berhasil .alaupun
dicari sampai indeks = /
0uatlah bahasa narasi- flo.chart- dan program dari
pseudocode berikut
1. "lgoritma pencarian beruntun dimana elemen1
elemen " tidak berurut dan akan ditampilkan
kalimat bila elemen ditemukan.
Deklarasi
integer m = 10;
integer A[m], x;
integer indeks;
Deskripsi
{baca elemen matriks A}
for (indeks = 1 to m step 1)
write (masukkan elemen ke-, indeks);
read (A[indeks]);
endfor.
{baca elemen x}
write (masukkan elemen x:); write (masukkan elemen x:);
read (x);
{mencari x dalam A}
indeks 1;
while (indeks <= m && x != A[indeks]) do
indeks indeks + 1;
endwhile.
{menetapkan hasilnya}
if (x = A[indeks])
then write (x ditemukan);
else write (x tidak ditemukan);
endif.
$. "lgoritma pencarian beruntun dimana
elemen1elemen " sorted (berurut) dan akan
ditampilkan kalimat bila elemen ditemukan.
Deklarasi
integer m = 10; integer m = 10;
integer A[m], x;
integer indeks;
Deskripsi
{baca elemen matriks A}
for (indeks = 1 to m step 1)
write (masukkan elemen ke-, indeks);
read (A[indeks]);
endfor.
{baca elemen x}
write (masukkan elemen x:);
read (x); read (x);
{mencari x dalam A}
indeks 1;
while (indeks <= m && x < A[indeks]) do
indeks indeks + 1;
endwhile.
{menetapkan hasilnya}
if (x = A[indeks])
then write (x ditemukan);
else write (x tidak ditemukan);
endif.
Binar! searc
0inary search adalah teknik yang diterapkan
hanya pada elemen larik yang telah terurut
(sorted).
Proses binary search sebagai berikut
1. Jika jumlah elemen adalah m- maka tetapkan 1. Jika jumlah elemen adalah m- maka tetapkan
indeks = m2$ sehingga larik terbagi dua- yaitu
bagian kiri dengan indeks dari 1 sampai m2$-
dan bagian kanan dengan indeks dari m2$
sampai m.
$. Periksa dulu apakah 3 = "#indeks+- bila ya
berarti elemen ditemukan- bila tidak teruskan
langkah berikutnya.
(. Periksa apakah 3 4 "#indeks+- bila ya cari disisi
kanan. 0ila tidak cari di sisi kiri.
). 5eruskan pencarian pada sisi yang tepat ). 5eruskan pencarian pada sisi yang tepat
dengan mengambil indeks tengah dari sisi
tersebut sampai elemen ditemukan atau tidak
sama sekali
Contoh
!arik " = #* 1% 1( 1/ 1' $1 */ '1+
, = 1%
Pada contoh ini jumlah elemen m = ' sehingga indeks =
'2$ = ) dan "#)+ = 1/ dan 3 6 "#)+
Periksa apakah 3 4 "#)+ atau 3 4 1/7 Ja.abannya tidak- Periksa apakah 3 4 "#)+ atau 3 4 1/7 Ja.abannya tidak-
maka periksa sisi kiri.
Pada sisi kiri indeks = (1 8 ))2$ = $ sehingga "#$+ = 1%
5ernyata 3 = "#$+ sehingga elemen ditemukan dalam dua
langkah.
0uatlah bahasa narasi- flo.chart- dan program dari
pseudocode berikut
Deklarasi
integer m = 10;
integer A[m], x;
integer idx1, idx2, indeks; integer idx1, idx2, indeks;
boolean ketemu;
Deskripsi
idx1 1;
idx2 m
ketemu false;
write (masukkan data yang dicari:);
read (x);
write (baca larik yang sudah sort);
for idx1 = 1 to m
read (A[idx1]);
endfor;
while (!ketemu && (idx1 < idx2)) do while (!ketemu && (idx1 < idx2)) do
{mengitung titik tengah}
indeks (idx1 + idx2)/2
if (x = A[indeks])
then ketemu true;
else if (x > A[indeks])
then idx1 indeks + 1; {sisi
kanan}
else idx2 indeks 1; {sisi
kiri}
endif;
endif;
endwhile; endwhile;
if (ketemu)
then write (x ketemu di
posisi:,indeks);
else write (x tidak ditemukan);
endif.
pusta"a
9uarga. $%1$. "lgoritma dan Pemrograman.
:ogyakarta penerbit andi.