Searching adalah pencarian data dengan cara menelusuri data-data
tersebut. Tempat pencarian data dapat berupa array dalam
memori(pencarian internal), bisa juga pada file pada external
storage(pencarian external).
Ada dua macam teknik pencarian yaitu pencarian sekuensial dan pencarian
biner. Perbedaan dari dua teknik ini terletak pada keadaan data.
Pencarian sekuensial digunakan apabila data dalam keadaan acak atau
tidak terurut (contoh: sequential search). Sebaliknya, pencarian biner
digunakan pada data yang sudah dalam keadaan urut (contoh: Binary serach
dan interpolation search). Pada Kesempatan ini kita hanya akan membahas
tentang pencarian internal menggunakan Array dinamis (pointer).
Berikut adalah metode-metode yang digunakan dalam Searching
1. Sequential Search (Pencarian berurutan)
Adalah suatu teknik pencarian data dalam array (1 dimensi) yang akan
menelusuri semua elemen-elemen array dari awal sampai akhir, dimana
data-data tidak perlu diurutkan terlebih dahulu. 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.
Contoh Program :
#include <iostream>
using namespace std;
main() {
int data[8] = {8,10,6,-2,11,7,1,100};
int cari;
int tanda=0;
cout<<"masukkan data yang ingin dicari = "; cin>>cari;
for(int i=0;i<8;i++){
if(data[i] == cari) tanda=1;
}
if(tanda==1) cout<<"Data ada!\n";
else cout<<"Data tidak ada!\n";
}
2. Binary Search
Salah satu syarat agar binary search dapat dilakukan adalah data sudah
dalam keadaan urut. Dengan kata lain, apabila data belum dalam keadaan
urut, binary search tidak dapat dilakukan.
Prinsip dari binary search dapat dijelaskan sebagai berikut :
a.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.
b.Jika lebih kecil, proses dilakukan kembali tetapi posisi akhir dianggap sama dengan posisi tengah –1.
c.Jika lebih besar, proses dilakukan kembali tetapi posisi awal dianggap
sama dengan posisi tengah +1. Jika data sama, berarti ketemu.
Contoh Program:
#include <iostream>
using namespace std;
main() {
int data[7] = {10,13,17,34,58,67,99};
int N = 7
int kiri=0,kanan=N-1,tengah,cari;
int tanda=0;
cout<<”Masukan data yang di cari?”;cin>>cari;
while((kiri<=kanan)&&(tanda==0)) {
tengah=(kiri+kanan)/2;
cout<<”data tengah = ”<<tengah<<endl;
if(data[tengah]==cari) tanda=1;
else if(cari < data[tengah]) {
cout<<”cari di kiri\n”;
kanan=tengah-1;
}
else {
kiri=tengah+1;
cout<<”cari di kanan\n”;
}
if(tanda==1) cout<<”Data ada\n”;
else cout<<”Data tidak ada\n”;
}
}
3. Interpolation Search
Teknik ini dilakukan pada data yang sudah terurut berdasarkan kunci
tertentu. Teknik searching ini dilakukan dengan perkiraan letak data.
Contoh ilustrasi: jika kita hendak mencari suatu kata di dalam kamus
telepon, misal yang berawalan dengan huruf J, maka kita tidak akan
mencarinya dari awal buku, tapi kita langsung membukanya pada 1/3 atau
1/4 dari tebal kamus.
Rumus posisi relatif kunci pencarian dihitung dengan rumus:
- Jika data[posisi] > data yg dicari, high = pos – 1
- Jika data[posisi] < data yg dicari, low = pos + 1 Contoh program:
#include <iostream>
#include <math.h>
using namespace std;
main() {
int data[7] = {10,13,17,34,58,67,99};
int low,high,cari,posisi;
float posisi1;
int N = 7,tanda=0;
low=0,high=N-1;
cout<<”Masukan data yang di cari?”;cin>>cari;
do {
posisi1 = (cari-data[low])/(data[high]-data[low])*(high-low)+low;
posisi = floor(posisi1); //pembulatan ke bawah
if(data[posisi]==cari) {
tanda =1;
break;
}
if(data[posisi]>cari) high=posisi-1;
else if (data[posisi]<cari) low=posisi+1
}
while (cari>=data[low]&&cari<=data[high]);
if(tanda==1) cout<<”Data ditemukan\n”;
else cout<<”Data tidak ada\n”;
}
Referensi :
https://rockadimetalisem.files.wordpress.com/2011/07/searching.pdf
https://id.scribd.com/doc/84457575/Materi-Sorting-Dan-Searching
Tidak ada komentar:
Posting Komentar