Pencarian (searching) merupakan proses yang fundamental dalam pengolahan data.
Proses pencarian adalah menemukan nilai (data) tertentu di dalam sekumpulan
data yang bertipe sama(baik bertipe dasar atau bertipe bentukan). Sebagai
contoh, untuk mengubah (update) data
tertentu, langkah pertama yang harus dilakukan adalah mencari keberadaan data
tersebut di dalam kumpulannnya. Jika data yang dicari ditemukan, maka data
tersebut dapat diubah nilainya dengan data yang baru. Algoritma pencarian yang
akan dibicarakan mulai dengan algoritma pencarian yang paling sederhana yaitu pencarian beruntun (sequential search) hingga algoritma pencarian yang lebih maju
yaitu pencarian bagidua (binary search).
1. Pencarian Beruntun (Sequential Search)
Pencarian berurutan sering disebut pencarian linear merupakan
metode pencarian yang paling sederhana. Pencarian berurutan menggunakan prinsip
sebagai berikut : data yang ada dibandingkan satu per satu secara berurutan
dengan yang dicari sampai data tersebut ditemukan atau tidak ditemukan.
Pada dasarnya, pencarian ini hanya melakukan pengulangan dari 1
sampai dengan jumlah data. Pada setiap pengulangan, dibandingkan data ke-i
dengan yang dicari. Apabila sama, berarti data telah ditemukan. Sebaliknya
apabila sampai akhir pengulangan tidak ada data yang sama, berarti data tidak
ada. Pada kasus yang paling buruk, untuk N elemen data harus dilakukan
pencarian sebanyak N kali pula.
Algoritma pencarian berurutan dapat
dituliskan sebagai berikut :
1.
i ← 0 2
2.
ketemu ← false 3
3.
Selama (tidak ketemu) dan (i <= N) kerjakan
baris 4
4.
Jika (Data[i] = x) maka ketemu ← true, jika
tidak i ← i + 1
5.
Jika (ketemu) maka i adalah indeks dari data
yang dicari, jika tidak data tidak ditemukan
Perhatikan larik L di
bawa ini dengan n = 6 elemen :
12
|
15
|
13
|
20
|
75
|
14
|
1
|
2
|
3
|
4
|
5
|
6
|
Misalkan nilai yang dicari adalah x = 20
Elemen yang dibandingkan (berturut-turut) : 12, 15, 13, 20 (ditemukan)
Indeks larik yang dikembalikan : idx = 4
Misalkan nilai yang dicari adalah x = 12
Elemen yang dibandingkan (berturut-turut) : 12 (ditemukan)
Indeks larik yang dikembalikan : idx = 1
Misalkan nilai yang dicari adalah x = 14
Elemen yang dibandingkan (berturut-turut) : 12, 15, 13, 20, 75, 21 (tidak ditemukan)
Indeks larik yang dikembalikan : idx = -1
Cara kerja dari algoritma ini adalah dengan menelusuri
elemen-elemen array atau larik dari awal sampai akhir, dimana data tidak perlu
diurutkan terlebih dahulu. Kemungkinan terbaik (best case) dari algoritma ini adakah jika data yang dicari berada
pada elemen array yang terdepan sehingga waktu yang dibutuhkan untuk pencarian
semakin singkat. Sebaliknya, akan mencapai kondisi terburuk (worst case) apabila data yang dicari
berada pada elemn akhir.
Metode pencarian beruntun atau linear
(sequential search) dapat
dipergunakan apabila :
1.
Nilai-nilai tersebut belum berurutan
2.
Nilai-nilai tersebut sudah berurutan, tetapi
struktur data yang dipergunakan untuk menyimpan nilai-nilai tersebut adalah linked list.
2. Pencarian
Bagidua (Binary Search)
Salah satu syarat agar pencarian biner dapat dilakukan adalah data
sudah dalam keadaan urut. Dengan kata lain, apabila data belum dalam keadaan
urut, pencarian biner tidak dapat dilakukan. Dalam kehidupan sehari-hari,
sebenarnya kita juga sering menggunakan pencarian biner. Misalnya saat ingin
mencari suatu kata dalam kamus.
Prinsip dari pencarian biner dapat dijelaskan sebagai berikut :
mula-mula diambil posisi awal 0 dan posisi akhir = N - 1, kemudian dicari
posisi data tengah dengan rumus (posisi awal + posisi akhir) / 2. Kemudian data
yang dicari dibandingkan dengan data tengah. Jika lebih kecil, proses dilakukan
kembali tetapi posisi akhir dianggap sama dengan posisi tengah –1. Jika lebih
besar, porses dilakukan kembali tetapi posisi awal dianggap sama dengan posisi
tengah + 1. Demikian seterusnya sampai data tengah sama dengan yang dicari.
Untuk lebih jelasnya perhatikan contoh berikut. Misalnya ingin
mencari data 16 pada sekumpulan data berikut :
2
|
8
|
10
|
11
|
14
|
16
|
19
|
22
|
30
|
34
|
awal
|
tengah
|
akhir
|
Mula-mula dicari data tengah, dengan rumus (0 + 9) / 2 = 4.
Berarti data tengah adalah data ke-4, yaitu 14. Data yang dicari, yaitu 16, dibandingkan
dengan data tengah ini. Karena 16 > 14, berarti proses dilanjutkan tetapi
kali ini posisi awal dianggap sama dengan posisi tengah + 1 atau 5.
2
|
8
|
10
|
11
|
14
|
16
|
19
|
22
|
30
|
34
|
awal
|
tengah
|
akhir
|
Data tengah yang baru didapat dengan rumus (5 + 9) / 2 = 7.
Berarti data tengah yang baru adalah data ke-7, yaitu 22. Data yang dicari
yaitu 16 dibandingkan dengan data tengah ini. Karena 16 < 22, berarti proses
dilanjukkan tetapi kali ini posisi akhir dianggap sama dengan posisi tengah – 1
atau 6.
2
|
8
|
10
|
11
|
14
|
16
|
19
|
22
|
30
|
34
|
awal=Tengah
|
akhir
|
Data tengah yang baru didapat dengan rumus (5 + 6) / 2 = 5.
Berarti data tengah yang baru adalah data ke-5, yaitu 16. data yang dicari
dibandingkan dengan data tengah ini dan ternyata sama. Jadi data ditemukan pada
indeks ke-5.
Pencarian biner ini akan berakhir jika data ditemukan atau posisi
awal lebih besar daripada posisi akhir. Jika posisi sudah lebih besar daripada
posisi akhir berarti data tidak ditemukan.
Untuk lebih jelasnya perhatikan contoh pencarian data 15 pada data
diatas. Prosesnya hampir sama dengan pencarian data 16. Tetapi setelah posisi
awal 5 dan posisi akhir 6, data tidak ditemukan dan 15 < 16, maka posisi
akhir menjadi posisi tengah – 1 atau = 4 sedangkan posisi awal = 5.
Disini dapat dilihat bahwa posisi awal lebih besar daripada posisi
akhir, yang artinya data tidak ditemukan.
Algoritma pencarian biner dapat dituliskan sebagai berikut :
1.
L ← 0
2.
R ← N – 1
3.
ketemu ← false
4.
Selama (L <= R) dan (tidak ketemu) kerjakan
baris 5 sampai dengan 8
5.
m ← (L + R) / 2
6.
Jika (Data[m] = x) maka ketemu ← true
7.
Jika (x < Data[m]) maka R ← m – 1
8.
Jika (x > Data[m]) maka L ← m + 1
9.
Jika (ketemu) maka m adalah indeks dari data
yang dicari, jika tidak data tidak ditemukan
Kelebihan (Best Case)
dari binary search adalah untuk pencarian data yang jumlahnya banyak,
pencarian Binary Search relatif cepat dan beban komputasi juga lebih kecil
karena pencarian dilakukan dari depan, tengah, dan belakang.
Kekurangan binary search adalah data harus di
sorting terlebih dahulu, Algoritma lebih rumit, tidak baik untuk data
berangkai.
Impementasi
Bahasa Pascal
Implementasi Bahasa C
Implementasi Bahasa C
Daftar Pustaka :
Munir, Rinaldi. 2013. Algoritma & Pemrograman dalam Bahasa Pascal dan C Edisi Revisi. Bandung : Informatika.
Baca juga :
0 komentar:
Posting Komentar