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
© Copyright 2024 Paperzz