Pencarian (Searching)

advertisement
Pencarian (Searching)
 Kunci (key) digunakan untuk melakukan
pencarian record yang diinginkan didalam
suatu list.
 Kunci harus unik, artinya tidak boleh ada
kunci yang sama dalam satu list.
 Kunci yang merupakan bagian dari
record, disebut : Kunci - Intern (InternalKey). Kunci yang tidak merupakan bagian
dari record, tetapi berkaitan dengan
record, disebut Kunci - Luar (ExternalKey), biasanya berupa File Indeks.
 Contoh : Satu record data mahasiswa
terdiri dari (Nama, NIM, Jenis-Kelamin,
Alamat, Tempat / Tanggal Lahir).
NIM digunakan sebagai kunci karena NIM
merupakan attribut yang bersifat unik,
tidak ada yang sama.
Teknik Sequential
  Merupakan teknik yang sederhana dan
langsung, dapat digunakan pada struktur
data baik array maupun linked-list, dan
data tidak perlu urut
  Algoritma :
N: Banyaknya record dalam list array k
1. Untuk setiap k[i] : 0  i  N-1
Uji apakah k[i] = Kunci
2. Bila k[i] = Kunci, Indeks := i
Selesai
3. Bila k[i] <> Kunci,
Lanjutkan pencarian hingga i = N-1
4. Bila i = N-1 dan k[i] <> Kunci,
Indeks = -1  berarti data yg dicari tdk ada
5. Selesai
/** Fungsi SequentialSearch untuk mencari data
Key pada array X dgn jumlah elemen N, Return
Index Array jika data ada, dan return –1 jika
data Key tidak Ada **/
int SequentialSearch( int *X, int Key, int N)
{
int i;
for(i=0; i < N ; i++) if(Key==X[i])
return(i);
return(-1);
}
Teknik Binary
  Teknik ini hanya dapat dilakukan pada
list yang telah terurut dan berada pada
struktur array.
  Algoritma :
N:
1.
2.
3.
4.
5.
6.
7.
8.
Banyaknya record dalam list array k
Kiri = 0 dan Kanan = N-1
Tengah = (int)(Kiri + Kanan) / 2
Bila k[Tengah] = Kunci
Maka Indeks = Tengah, Selesai
Bila k[Tengah] < Kunci,
Kanan = Tengah - 1
Bila k[Tengah] > Kunci,
Kiri = Tengah + 1
Bila Kiri  Kanan, dan k[Tengah] <>
Kunci,
Ulangi mulai dari 2.
Bila k[Tengah] <> Kunci, Indeks := -1
Selesai
/** Fungsi BinarySearch untuk mencari data Key
pad array X dgn jumlah elemen N, Return Index
dari Array jika data ada, dan return –1 jika data
Key tidak ada **/
int BinarySearch(int *X, int Key, int N)
{
int mid;
int low = 0;
int high = N – 1;
while (low <= high){
mid = (low + high) / 2;
if( Key == X[mid]) return(mid);
if( Key < X[mid] ) high = mid – 1;
else low = mid + 1;
}
return(-1);
}
Ilustrasi Pencarian Biner pada daftar
mahasiswa dengan kunci = NIM, dan target
= 112 (Ursula).
Indeks
0
1
2
3
4
5
6
7
8
9
10
11
12
13
Nama
Ahmad
Zamzami
Ursula
Hamdan
Budiman
Rahayu
Usman
Fifi
Alex
Lukman
Widodo
Tiur
Halim
Rumokoy
NIM
34
65
112
116
124
176
178
187
190
208
214
268
333
424
Teknik Interpolasi
Contoh List terdiri dari 100 record, kunci
paling terendah : 220, tertinggi : 980. Target
= 743.
Maka perkiraan posisi target :
743 - 220 x 100 = 0.69
980 - 220
Posisi taksiran = 0.69 x 100 = 69.
Apakah k[69] = 743 (Kunci) ?
Bila Kunci > k[69]
maka : k [min] = k[69+1]
sedangkan k[max] tetap
Bila Kunci < k[69]
maka : k [min] = tetap
sedangkan k[max] = k[69-1].
Gunakan rumus umum :
P=
Kunci - k[min]
k[max] - k[min]
Posisi = Round(P*(max-min))+min
Download