T0616 ALGORITMA DAN PEMROGRAMAN (23) UNIVERSITAS BINA NUSANTARA

Download Report

Transcript T0616 ALGORITMA DAN PEMROGRAMAN (23) UNIVERSITAS BINA NUSANTARA

T0616
ALGORITMA DAN PEMROGRAMAN
(23)
SUBANDIJO
UNIVERSITAS BINA NUSANTARA
FAKULTAS ILMU KOMPUTER
JAKARTA, 2005
6/28/2016
T0616 - Algoritma dan Pemrograman
1
PENCARIAN (SEARCHING)
• DEFINISI
• INTERNAL KEY VS EXTERNAL KEY
• METODE :
• LINEAR /SEKUENSIAL SEARCH
• BINARY SEARCH
• INTERPOLATION SEARCH
6/28/2016
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.
6/28/2016
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.
6/28/2016
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.
6/28/2016
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.
6/28/2016
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.
6/28/2016
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);
}
6/28/2016
T0616 - Algoritma dan Pemrograman
8
BINARY SEARCH
• DIGUNAKAN UNTUK LIST YANG BESAR
UKURANNYA.
• DATA HARUS URUTSEHINGGA DATA HARUS DISORT DULU SEBELUM PENCARIAN DILAKUKAN.
6/28/2016
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.
6/28/2016
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);
}
6/28/2016
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.
6/28/2016
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.
6/28/2016
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
6/28/2016
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
}
6/28/2016
T0616 - Algoritma dan Pemrograman
15
THE END
“...ALL YOU NEED IS LOVE…”
6/28/2016
T0616 - Algoritma dan Pemrograman
16