SEARCHING Pencarian data (searching) yang sering juga disebut dengan table look-up atau storage and retrieval information, adalah suatu proses untuk mengumpulkan sejumlah informasi di dalam pengingat komputer dan kemudian mencari kembali informasi yang diperlukan secepat mungkin. Pencarian data dari sekumpulan data bisa hanya sekedar untuk ditampilkan atau untuk diolah lebih lanjut. Sehingga dengan demikian dalam model di dunia komputer perlu juga diperkenalkan algoritma pencarian. Ada banyak metode pencarian, antara lain pencarian berurutan, pencarian berindex, tetapi metode pencarian yang paling cepat adalah pencarian biner/binary search. Algoritma pencarian (searching algorithm) adalah algoritma yang menerima argumen X (sebagai kunci), dan dengan langkah-langkah tertentu akan mencari rekaman yang kuncinya bernilai X. Algoritma tersebut bisa menemukan rekaman secara utuh atau hanya memperoleh pionter yang menunjuk ke rekaman yang dimaksud. Pada pencarian data, nilai akhir (result) setelah melakukan aksi pencarian adalah :
False, bila data yang dicari tidak ada.
True, bila data yang dicari diketemukan.
Berdasar nilai akhir ini maka dapat kita ambil aksi lain seperti INSERT bila belum ada, atau Delete bila data ada. Pencarian yang berhasil menemukan rekaman yang dimaksud sering dimaksud dengan retrieval. Jika pencarian tidak berhasil menemukan data yang dicari, maka perlu menambahkan data tersebut ke dalam berkas yang sudah ada, dikenal dengan algoritma pencarian dan penyisipan (search and insertion algorithm). Searching dapat dilakukan dengan dua cara, yaitu : 1. Sequential Search 2. Binary Search
Pusat Pengembangan Pendidikan – Universitas Gadjah Mada 1
1. Sequential Search
Sequential search (pencarian berurut) adalah metode yang paling sederhana dari sejumlah metode pencarian. Dari serangkaian data yang ada, data yang dicari dibandingkan satu dengan yang lain sampai data ditemukan atau tidak. Pada saat data yang dicari sudah ketemu, maka proses pencarian langsung dihentikan. Tetapi jika belum ketemu, maka pencarian diteruskan sampai seluruh data dibandingkan. Maksimal pencarian adalah sebanyak N buah data. Pencarian data secara sequential dilakukan dengan dua cara, yaitu :
Untuk Vektor yang belum urut
Untuk Vektor yang sudah terurut.
Yang membedakan kedua cara tersebut adalah pada kondisi yang harus dipenuhi selama proses pencarian.
Vektor belum terurut Sebelum dilakukan proses pencarian, data masih acak (belum terurut naik). Proses pencarian dilakukan selama : -
Data belum ditemukan ketemu ← False.
-
Index Vektor belum melampaui jumlah data (n) i <= n.
Langkah-langkah pencarian data sequensial (untuk data belum urut) : (0). Baca vektor yang diketahui, misal vektor A dengan N elemen (1). Baca elemen yang aka dicari, misalkan Data. (2). (Inisialisasi). Tentukan : Ada = False (3). (Proses pencarian). Untuk I = 1 sampai N kerjakan langkah 4. (4). Test apakah data = A[i]? Jika ya (data ketemu), tentukan ada = true, posisi = i dan i = N. (5). (Menambah data pada vektor, jika diperlukan).
Pusat Pengembangan Pendidikan – Universitas Gadjah Mada 2
1. Test apakah Ada = False ? 2. Jika ya (data tidak ketemu), tentukan N = N +1 dan A[i] = Data. (6). Selesai
Dari
langkah-langkah
tersebut
diatas,
diperoleh
algoritma
Sequential Search (untuk data belum terurut) : Input(n) For i ← 1 to n do Input (A[I]) End For Input (x) Ketemu ← F i ← 1 while (ketemu ← F) and (i < n) do if A[i]=x then ketemu ← T posisi ← i else i ← i + 1 end if end while if ketemu ← F then status ← “Data Tidak Ada” output (status) else status ← “Data Diketemukan” output (Status, Posisi) end if
Vektor sudah terurut Proses pencarian pada vektor yang telah diurutkan adalah dimulai dari elemen pertama pada vektor dilakukan perbandingan dengan elemen yang dicari. Jika elemen dalam vektor masih lebih kecil dari elemen yang dicari, pencarian diteruskan. Jika sudah lebih besar, pencarian diihentikan dan bisa dipastikan bahwa elemen yang dicari memang tidak diketemukan. Jika elemen yang dicari tidak diketemukan dan dan ingin menyisipkan elemen tersebut pada posisinya yang tepat, maka seringkali
Pusat Pengembangan Pendidikan – Universitas Gadjah Mada 3
diperlukan adanya penggeseran terhadap elemen-elemen yang nantinya akan terletak pada subkrip yang lebih besar dari elemen yang dicari. Dengan demikian, sebelum dilakukan proses pencarian, data sudah terurut naik. Proses pencarian dilakukan selama : -
Data belum ditemukan ketemu ← False.
-
Index Vektor belum melampaui jumlah data (n) i <= n.
-
Data pada Vektor ke-i <= data yang dicari A[i] <= x.
Langkah-langkah pencarian secara sequensial (untuk data urut) : 0. Baca vektor yang diketahui, misalan vektor A dengan N elemen. Kemudian urutkan vektor tersebut secara naik. 1. (Inisialisasi). Tentukan : Ada = false, I = 1 dan J = 0. 2. Kerjakan langkah 3 dan langkah 5 sampai I = N atau Ada = True. 3. Test apakah A[I] = data ? Jika tidak, kerjakan langkah 4. Jika ya, tentukan posisi = 1, Ada = True dan melompat ke langkah 5 (pencarian berhasil). 4. Test apakah A[I] > data ? Jika ya, tentukan J = I dan I = N – 1 (pencarian tidak berhasil). 5. Tentukan I = I + 1. 6. (Menyisipkan elemen baru jika diperlukan). Test apakah Ada = false ? Jika tidak, melompat ke langkah 10. Jika ya, kerjakan langkah 7. 7. (Mencari posisi untuk menyisipkan elemen). Test apakah J = 0 ? Jika ya, tentukan A[N+1] = Data (elemen baru menempati subkrip terakhir) dan melompat ke langkah 10. Jika tidak, kerjakan langkah 8. 8. (Menggeser elemen). Dimulai dari I = N sampai J dengan pertambahan –1, tentukan A[I+1] = a[I]. Kemudian tentukan A[J] = Data. 9. Tentukan N = N+1. 10. Selesai. Pusat Pengembangan Pendidikan – Universitas Gadjah Mada 4
Dari langkah-langhkah tersebut diatas, diperoleh algoritma Sequential Search (untuk data sudah terurut) : Input(n) For i ← 1 to n do Input (A[i]) End For Input (x) Ketemu ← F i ← 1 while (ketemu ← F) and (i
Pada metode pencarian berurutan (sequential), dapat ditentukan banyaknya perbandingan yang perlu dilakukan. Jika tidak ada penambahan atau penghapusan elemen, berarti akan melakukan pencarian pada tabel berukuran tetap, yaitu N, maka banyaknya perbandingan tergantung dari letak elemen yang dicari. Jika elemen yang dicari terletak pada elemen pertama, berarti perbandingan cukup dilakukan sekali. Sebaliknya jika elemen yang dicari terletak pada elemen terakhir, maka perlu melakukan perbandingan sebanyak N kali. Secara singkat, untuk pencarian yang berhasi rata-rata memerlukan perbandingan sebanyak (N+1)/2 kail, dan pencarian yang tidak berhasil memerlukan N kali perbandingan.
Pusat Pengembangan Pendidikan – Universitas Gadjah Mada 5
2. Binary_Search Digunakan untuk membuat program yang dapat mencari elemen suatu vektor dengan pencarian biner. Vektor yang diketahui harus diurutkan terlebih dahulu secara urut naik. Masukan berupa elemen yang akan dicari, yaitu data. Keluaran berupa data yang bertipe boolean yang menunjukkan ada tidaknya data yang dicari. Metode binary search jauh lebih cepat dari metode sequential search. Setelah vektor yang diketahui diurutkan, vektor tersebut dibagi dua sub vektor yang mempunyai jumlah elemen yang sama. Kemudian data dibandingkan dengan dengan data terakhir dari sub vektor pertama. Jika data yang dicari lebih kecil, pencarian diteruskan pada sub vektor pertama dengan membagi terlebih dahulu sub vektor tersebut. Tetapi jika data yang dicari lebih besar dari data terakhir pada sub vektor pertama, berarti data yang dicari kemungkinan terletak pada sub vektor yang kedua. Dengan demikian pencarian dilakukan pada sub vektor kedua. Proses-proses tersebut diatas dilakukan berulang-ulang sampai data yang dicari diketemukan atau tidak. Sebagai contoh, dimisalkan akan dicari data 20 pada vektor berikut : 2 8 11 15 18 19 20 22 35 40 42 bawah
tengah
atas
Vektor tersebut dipecah menjadi dua subvektor sebagai berikut : 2 8 11 15 18 subvektor 1
19 20 22 35 40 42 subvektor 2
Dari hasil pemecahan vektor tersebut diatas, dapat dilihat bahwa data yang bernilai 20 terdapat pada subvektor 1. dengan demikian, pencarian akan dilakukan pada subvektor 2, subvektor 1 tidak perlu dihiraukan lagi. Subvektor 2 kemudian dipecah menjadi : 19 20 22 subvektor 1
35 40 42 subvektor 2
Pusat Pengembangan Pendidikan – Universitas Gadjah Mada 6
Sekarang, data yang bernilai 20 terdapat pada subvektor lagi. Dengan demikian subvektor 1 dipecah menjadi 2 subvektor lagi. Proses diteruskan sampai data yang dicari ketemu atau tidak ketemu.
Dari contoh di atas, maka langkah-langkah dalam pencarian Biner : (0). Baca vektor yang diketahui, misalnya berupa vektor A dengan N buah elemen, dan urutkan secara urut naik. (1). Baca elemen yang aka dicari, misalkan Data (2). (Inisialisasi) Tentukan : Ada = false, Atas = N dan Bawah = 1. (3). Kerjakan langkah 4 dan 5 selama Atas >= Bawah. (4). (Menentukan batas subvektor). Tentukan : Tengah = (Atas + Bawah) div 2. (5). Test nilai Kode terhadap A[Tengah]. Jika Kode > A[Tengah], (Ada di subvektor 2), tentukan : Bawah = Tengah + 1. Jika Kode < A[Tengah], (Ada di subvektor 1), tentukan : Atas = Tengah – 1. Jika Kode = A, (ketemu), tentukan : Ada
= True,
Posisi = Tengah, dan Bawah = Atas + 1. (6). Selesai.
Secara umum, dalam pencarian biner, harus menentukan elemen tengah dari Vektor. Jika data yang dicari = elemen tengah, maka data ketemu. Jika data yang dicari < elemen tengah, maka pencarian data dilakukan pada setengah Vektor I. Jika data yang dicari > elemen tengah, maka pencarian data dilakukan pada setengah Vektor II. Pusat Pengembangan Pendidikan – Universitas Gadjah Mada 7
Data yang diinputkan harus sudah terurut naik. Jika belum terurut, maka sebelum proses pencarian dilakukan, perlu ditambahkan proses pengurutan data naik.
Algoritma Pencarian Biner (Binary Search) : For I ← 1 to n Do Input (A[I]) End for tengah ← (n+1) div 2 e_tengah ← A(Tengah) Input (x) Ketemu ← F If x = e_tengah Then ketemu ← T Posisi ← tengah Else if x < e_tengah then I ← 1 While (ketemu ← F) and (i
Pusat Pengembangan Pendidikan – Universitas Gadjah Mada 8
DAFTAR PUSTAKA
-
http://mastris.net/kuliah/praktalgoritma/unit4.html.
-
Santosa, Insap, 1992, Struktur Data Menggunakan Turbo Pascal 6.0, Yogyakarta : Andi Offset.
-
Buku kuliah D3 “Amikom” Yogyakarta.
Pusat Pengembangan Pendidikan – Universitas Gadjah Mada 9