download

T0616
ALGORITMA DAN PEMROGRAMAN
(23)
SUBANDIJO
UNIVERSITAS BINA NUSANTARA
FAKULTAS ILMU KOMPUTER
JAKARTA, 2005
7/11/2017
T0616 - Algoritma dan Pemrograman
1
PENCARIAN (SEARCHING)
• DEFINISI
• INTERNAL KEY VS EXTERNAL KEY
• METODE :
• LINEAR /SEKUENSIAL SEARCH
• BINARY SEARCH
• INTERPOLATION SEARCH
7/11/2017
T0616 - Algoritma dan Pemrograman
2
DEFINISI
• SEARCHING : MENCARI RECORD DATA YANG
DIINGINKAN DALAM SUATU LIST BERDASARKAN
KUNCI (KEY) YANG DIBERIKAN.
• KUNCI HARUS UNIK DALAM ARTI TIDAK BOLEH
ADA NILAI KUNCI YANG SAMA DALAM LIST.
• PENCARIAN BELUM TENTU KETEMU. JIKA
KETEMU, TENTUKAN LOKASI PENEMUAN
INDEKS. JIKA TIDAK KETEMU, SET INDEKS = -1.
7/11/2017
T0616 - Algoritma dan Pemrograman
3
INTERNAL VS EKSTERNAL KEY
• KUNCI YANG MERUPAKAN BAGIAN DARI
RECORD DISEBUT INTERNAL KEY SEDANGKAN
YANG BUKAN MERUPAKAN BAGAN DARI
RECORD DISEBUT EXTERNAL KEY.
• EXTERNAL KEY BIASANYA BERUPA FILE INDEX.
7/11/2017
T0616 - Algoritma dan Pemrograman
4
CONTOH
• SUATU RECORD DATA MAHASISWA TERDIRI
DARI FIELD-FIELD:
NAMA, NIM, JENIS_KELAMIN, ALAMAT,
TEMPAT_DAN_TANGGAL_LAHIR.
• NIM DAAT DIGUNAKAN SEBAGAI KUNCI KARENA
NIM MERUPAKAN ATRIBUT YANG BERSIFAT UNIK.
TIDAK ADA MAHASISWA YANG SAMA NIM-NYA.
7/11/2017
T0616 - Algoritma dan Pemrograman
5
SEQUENTIAL SEARCH
• KERAP DISEBUT LINEAR SEARCH.
• METODE SANGAT SEDERHANA DAN BIASA
DIGUNAKAN UNTUK LIST, ARRAY MAUPUN
LINKED LIST, YANG KECIL UKURANNYA.
• DATA TIDAK PERLU URUT.
7/11/2017
T0616 - Algoritma dan Pemrograman
6
ALGORITMA SEQUENTIAL
SEARCH
1. N BANYAK RECORD ARRAY X
2. UNTUK SETIAP X[I], 0  I  N-1, UJI APAKAH X[I] =
KUNCI.
3. JIKA X[I] = KUNCI MAKA DATA YANG DICARI
KETEMU DI INDEKS = I. SELESAI.
4. JIKA X[I]  KUNCI MAKA LANJUTKAN PENCARIAN
HINGGA DATA TERAKHIR YAITU I = N-1.
5. JIKA I= N-1 DAN X[I]  KUNCI BERARTI DATA
YANG DICARI TIDAK ADA DAN SET INDEKS = -1.
SELESAI.
7/11/2017
T0616 - Algoritma dan Pemrograman
7
IMPLEMENTASI ALGORITMA
int sequentialSearch(int *x, int key, int n) {
int i;
for(i=0; i < n; i++)
if(key==x[i]) return (i);
return (-1);
}
7/11/2017
T0616 - Algoritma dan Pemrograman
8
BINARY SEARCH
• DIGUNAKAN UNTUK LIST YANG BESAR
UKURANNYA.
• DATA HARUS URUTSEHINGGA DATA HARUS DISORT DULU SEBELUM PENCARIAN DILAKUKAN.
7/11/2017
T0616 - Algoritma dan Pemrograman
9
ALGORITMA BINARY SEARCH
1. N BANYAK RECORD ARRAY.
2. KIRI=0, KANAN= N-1.
3. MID =(INT) (KIRI+KANAN)/2
4. JIKA X[MID]=KUNCI MAKA INDEX = MID. SELESAI.
5. JIKA X[MID]<KUNCI MAKA KANAN=MID-1.
6. JIKA X[MID]>KUNCI MAKAN KIRI = MID+1.
7. JIKA KIRI  KANAN DAN X[MID]  KUNCI, MAKA
ULANGI 3.
8. JIKA X[MID]  KUNCI MAKA INDE X = -1. SELESAI.
7/11/2017
T0616 - Algoritma dan Pemrograman
10
IMPLEMENTASI ALGORITMA
Int binarySearch(int *x, int key, int n) {
int mid;
int kiri=0, kanan = n-1;
while(kiri<=kanan) {
mid = (kiri+kanan) / 2;
if(key==x[mid]) return(mid);
else if(key<x[mid]) kanan = mid-1;
else kiri = mid+1;
}
return(-1);
}
7/11/2017
T0616 - Algoritma dan Pemrograman
11
INTERPOLATION SEARCH
• BENTUK UMUM DARI BINARY SEARCH.
• DISEBUT INTERPOLASI KARENA DATA YANG
DICARI DIPERKIRAKAN ADA DI DALAM LIST.
newPtr = (node_t*)malloc(sizeof(node_t));
• KERAP
DIKATITKAN DENGAN EXTRAPOLATION
SEARCH JIKA DATA YANG DICARI ADA DI LUAR
LIST.
7/11/2017
T0616 - Algoritma dan Pemrograman
12
ALGORITMA INTERPOLATION
SEARCH
• MISALKAN LIST L TERDIRI DARI100 RECORD
DENGAN KUNCI MIN = 200, MAX = 980 DAN
KUNCI TARGET = 743.
newPtr INTERPOLASI
= (node_t*)malloc(sizeof(node_t));
• RUMUS
DIGUNAKAN UNTUK
MENENTUKAN POSISI TARGET SBB:
(743 - 220) * 100 / (980 - 22 ) = 0.69
• POASISI TAKSIRAN ADALAH
0. 69 * 100 = 69.
• UJI APAKAH L[69] = 743 (KUNCI)? JIKA YA
KETEMU, DAN SELESAI.
7/11/2017
T0616 - Algoritma dan Pemrograman
13
ALGORITMA INTERPOLATION
SEARCH
• JIKA KUNCI > L[69] MAKA L[MIN] = L[69]+ 1
SEDANGKAN L[MAX] TETAP.
• JIKA KUNCI < L[69] MAKA L[MIN] = TETAP
newPtr = (node_t*)malloc(sizeof(node_t));
SEDANGKAN
L[MAX] = L[69-1].
• RUMUS UMUM INTERPOLASI ADALAH SBB:
KUNCI - L[MIN]
P=
L[MAX] - L[MIN]
• PERKIRAAN POSISI:
ROUND(P * (MAX-MIN)) + MIN
7/11/2017
T0616 - Algoritma dan Pemrograman
14
IMPLEMENTASI ALGORITMA
INTERPOLATION SEARCH
int interpolationSearch(int* x, int key, int n) {
int mid, low = 0, high = n -1;
while(x[low] < key && x[high] >= key) {
mid = low + ((key-x[low]) * (high-low)) / (x[high] - x[low]);
if(x[mid] < key) low = mid + 1;
else if(x[mid] > key) high = mid - 1;
else return mid;
}
if (x[low] == key) return low;
else return -1; // not found
}
7/11/2017
T0616 - Algoritma dan Pemrograman
15
THE END
“...ALL YOU NEED IS LOVE…”
7/11/2017
T0616 - Algoritma dan Pemrograman
16