0% menganggap dokumen ini bermanfaat (0 suara)
1K tayangan

Modul 2 - Searching Array

Dokumen tersebut membahas tentang metode-metode pencarian data pada array yaitu sequential search, binary search, dan interpolation search beserta contoh kode programnya. Metode-metode tersebut digunakan untuk mencari suatu data pada array secara efisien.

Diunggah oleh

Nelxn Anindito
Hak Cipta
© Attribution Non-Commercial (BY-NC)
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
1K tayangan

Modul 2 - Searching Array

Dokumen tersebut membahas tentang metode-metode pencarian data pada array yaitu sequential search, binary search, dan interpolation search beserta contoh kode programnya. Metode-metode tersebut digunakan untuk mencari suatu data pada array secara efisien.

Diunggah oleh

Nelxn Anindito
Hak Cipta
© Attribution Non-Commercial (BY-NC)
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 15

UNIVERSITAS KRISTEN DUTA WACANA

SEARCHING ARRAY
Sequential Search, Binary Search, dan Interpolation Search

Tim Asisten Struktur Data - Semester Genap 2010/2011

JUDUL MATERI
Searching Array

TUJUAN INSTRUKSIONAL UMUM :


Mahasiswa dapat memahami penggunaan searching array dalam struktur data dan mampu mengaplikasikannya ke dalam pembuatan program.

TUJUAN INSTRUKSIONAL KHUSUS :


Mahasiswa dapat melakukan pencarian data pada array menggunakan metode sequential search, binary search, dan interpolation search Mahasiswa dapat mendeklarasikan memahami metode-metode pada searching array. Mahasiswa dapat mengaplikasikan metode-metode tersebut dan melakukan beberapa operasi seperti mengubah dan menghapus data di dalam array. Mahasiswa dapat menggunakan metode-metode searching array untuk menyelesaikan suatu kasus.

ALAT DAN BAHAN :


Software : Dev C++ atau Turbo C++ 4.5

TEORI SINGKAT
SEARCHING ARRAY Ada banyak metode yang dapat digunakan untuk melakukan pencarian data pada array. Namun, pada pembahasan ini kita akan membahas 3 metode saja, yaitu: sequential search, binary search dan interpolation search.

SEQUENTIAL SEARCH Sequential search merupakan metode pencarian data pada array yang paling mudah. Pada metode ini, data dalam array dibaca satu demi satu secara berurutan. Pembacaan data dimulai dari indeks yang terkecil ke indeks terbesar, atau sebaliknya.

Contoh sequential search: int a[5] = {3, 1, 7, 5, 8} (ingat: index array pada bahasa c dimulai dari index ke 0)

3 index [0]

1 [1]

7 [2]

5 [3]

8 [4]

Jika kita ingin mencari bilangan 5 pada array tersebut, maka proses yang terjadi: 1. Data array pada index ke-0, yaitu 3, dicocokan dengan bilangan yang dicari, yaitu 5. Ternayata, data pada indeks ke-0 tidak sama dengan bilangan yang akan dicari. Maka, pencarian dilakukan ke index berikutnya. 3 1 7 5 2. Index berikutnya adalah index ke-1. Seperti pada langkah 1, data pada index ke-1, yaitu 1, dicocokkan dengan 5, bilangan yang dicari. Ternyata, data pada index ke-1 tidak sama dengan bilangan yang dicari. Maka, pencarian dilakukan ke index berikutnya. 3 1 7 5 5 3. Index berikutnya adalah index ke-2. Ternyata, data pada index ke-1 juga tidak sama dengan bilangan yang dicari. Maka, pencarian dilakukan ke index berikutnya. 3 1 7 5 8 5 4. Index berikutnya adalah index ke-3. Data pada index ke-3 tersebut sama dengan bilangan yang dicari, yaitu 5. Maka, pencarian dihentikan dan kita keluar dari pencarian. 3 1 7 5 8 5 8 5 8

BINARY SEARCH Metode pencarian yang kedua adalah binary search. Pada metode pencarian ini, data harus diurutkan terlebih dahulu. Setelah urut, data dibagi menjadi dua bagian (secara logika), untuk setiap tahap pencarian. Algoritma binary search : 1. Mulai. 2. Data diambil dari posisi 1 sampai posisi n (posisi akhir). Untuk inisialisai awal, posisi awal adalah index ke-0 dan posisi akhir adalah index terakhir. 3. Mencari posisi data tengah dengan rumus (posisi awal + posisi akhir) / 2.

4. Data yang dicari dibandingkan dengan data tengah. Jika data yang dicari lebih kecil dari data tengah, lakukan langkah 5. Jika data yang dicari lebih besar dari data tengah, lakukan langkah 6. Jika data yang dicari sama dengan data yang tengah, maka data tengah tersebut adalah data yang dicari, lalu keluar dari perulangan. 5. Proses pencarian dilakukan dengan posisi akhir adalah posisi tengah 1, kemudian ulangi langkah 2. 6. Proses pencarian dilakukan dengan posisi awal adalah posisi tengah + 1, kemudian ulangi langkah 2. 7. Selesai.

INTERPOLATION SEARCH Interpolation search merupakan metode pencarian ketiga yang akan kita bahas. Seperti pada binary search, data harus diurutkan terlebih dahulu sebelum dilakukan pencarian. Pada metode ini, kita mencoba menebak letak data yang kita cari, dengan perhitungan:

Posisi

kunci data [low ] x ( high low ) low data [ high ] data [ low ]

Jika data[posisi] > data yg dicari, high = pos 1 Jika data[posisi] < data yg dicari, low = pos + 1

Catatan: kunci adalah data yang dicari

TAMBAHAN MATERI break ; digunakan untuk keluar dari suatu blok perintah

continue; digunakan untuk mem by-pass satu iterasi pada perulangan

GUIDED
1. Carilah salah satu angka dari array di bawah ini dengan menggunakan metode sequential search! array[8] = {7,5,2,3,9,6,0,4} Output:

Source Code: /* Program untuk mencari data pada array dengan metode sequential search */ #include<cstdio> #include<windows.h>

int main(){ int array[8] = {7,5,2,3,9,6,0,4}; int cari, flag, i; //mencetak data pada array printf("Isi array :\n"); for(i = 0 ; i < 8 ; i++){ printf("%d\t", array[i]); } printf("\n"); //meminta input data yang akan dicari printf("\nMasukkan data yang dicari : "); scanf("%d",&cari); //melakukan pencarian for(i = 0 ; i < 8 ; i++){ if(array[i] == cari){ flag = 1; break; } }

//mencetak hasil pencarian if(flag == 1){ printf("\n\nData %d ditemukan pada index ke-%d", cari, i); } else{ printf("\n\nData yang anda cari tidak ditemukan"); } printf("\n\n\n"); system("pause"); return 0; }

2. Carilah salah satu angka yang di-inputkan oleh user (8 angka) menggunakan binary search! Untuk lebih jelasnya, perhatikan output di bawah ini! Output:

Source Code: /* Program untuk mencari data pada array dengan metode binary search */ #include<cstdio> #include<windows.h>

int main() { int array[8]; int awal, tengah, akhir; int cari, i; int flag = 0; //menerima inputan array dari user printf("Masukkan isi array :\n"); for(i = 0 ; i < 8 ; i++){ printf("Indeks[%d] = ", i); scanf("%d", &array[i]); } printf("\n\nMasukkan data yang dicari : "); scanf("%d",&cari); printf("\n\n"); //inisialisasi posisi awal dan akhir awal = 0; akhir = 9; //melakukan pencarian while(awal <= akhir && flag == 0){ tengah = (awal + akhir)/2; //mencari posisi data tengah printf("\n\nData tengah berada pada indeks ke-%d\n",tengah); //melakukan pengecekan terhadap data tengah if(array[tengah] == cari){ flag=1; } else if(array[tengah] < cari){ printf("Data yang anda cari lebih besar, cari di kanan\n"); awal = tengah + 1; } else{ printf("Data yang anda cari lebih kecil, cari di kiri\n"); akhir=tengah-1; } }

printf("\n\n"); //mencetak hasil pencarian if(flag=1){ printf("Data yang anda cari ditemukan"); } else{ printf("Data tidak ditemukan"); } printf("\n\n\n"); system("pause"); return 0; }

Jika data yang dimasukkan tidak diurutkan, apa yang terjadi? Coba amati hasilnya!

Dari contoh output di atas, berarti kita mempunyai array sebagai berikut: index [0] 2 [1] 3 [2] 7 [3] 8 [4] 11 [5] 13 [6] 16 [7] 17

Mencari posisi data tengah posisi awal = index awal = 0 posisi akhir = index akhir = 7 posisi data tengah = (0 + 7) / 2 = 7 / 2 = 3.5 karena index merupakan bilangan bulat, maka hasil di atas dibulatkan ke bawah, menjadi 3. index [0] 2 [1] 3 [2] 7 [3] 9 [4] 11 [5] 13 [6] 16 [7] 17

data tengah = index ke-3 = 9 Membandingkan nilai yang dicari dengan data tengah index [0] 2 [1] 3 [2] 7 [3] 9 [4] 11 7 [5] 13 [6] 16 [7] 17

Karena data yang dicari lebih kecil dari data tengah, maka posisi akhir (index terakhirnya) berubah menjadi posisi tengah -1. Artinya, posisi akhir adalah index ke-2 (didapat dari 3 - 1) index [0] 2 [1] 3 [2] 7 [3] 9 [4] 11 [5] 13 [6] 16 [7] 17

posisi akhir yang baru Setelah posisi akhir yang baru ditemukan, kita kembali mencari posisi data tengah. Posisi data tengah yang baru adalah 1 (hasil dari 2 - 0). index [0] 2 [1] 3 [2] 7 [3] 9 [4] 11 [5] 13 [6] 16 [7] 17

Data tengah yang baru dibandingkan dengan data yang dicari index [0] 2 [1] 3 [2] 7 7 [3] 9 [4] 11 [5] 13 [6] 16 [7] 17

?
index [0] 2 posisi awal yang baru [1] 3 [2] 7

Karena data yang dicari lebih besar dari data tengah, maka posisi awal berubah menjadi posisi tengah + 1, yaitu pada index ke-2. [3] 9 [4] 11 [5] 13 [6] 16 [7] 17

posisi akhir

Kita kembali mencari data tengah yang baru. Posisi data tengah yang baru adalah pada index ke-2 karena posisi awal dan posisi akhir ada pada index yang sama (didapat dari (2 + 2) / 2) index [0] 2 [1] 3 [2] 7 [3] 9 [4] 11 [5] 13 [6] 16 [7] 17

data tengah = index ke-1 = 3

Ternyata data pada index ke-2 sama dengan data yang dicari. Berarti, data pada index ke-2 adalah data yang dicari Index [0] 2 [1] 3 [2] 7 [3] 9 [4] 11 [5] 13 [6] 16 [7] 17

3. Carilah sebuah angka dari data seperti di bawah ini dengan metode interpolation search! array[10] = {2,3,5,7,9,10,12,13,15,18}; Output:

Source code: /* Program untuk mencari data pada array dengan metode interpolation search */ #include <cstdio> #include <cstdlib> int main(){ int kunci; int low = 0, high = 9, posisi , tmp = 0; int array[10] = {2,3,5,7,9,10,12,13,15,18}; int i;

//mencetak array printf("array :\n"); for(i = 0 ; i < 10 ; i++){ printf("%d\t", array[i]); } printf("\n\n"); //meminta inputan data yang dicari printf("Masukkan data yang akan anda cari : "); scanf("%d",&kunci); //melakukan proses pencarian do{ posisi = ((kunci - array[low]) / (array[high] - array[low])) * (high - low) + low; if(array[posisi] == kunci){ tmp++; break; } if(array[posisi] > kunci){ high = posisi - 1; } else{ low = posisi + 1; } }while(kunci >= array[low] && kunci <= array[high]); //mencetak hasil pencarian if(tmp > 0){ printf("\ndata %d yang dicari ditemukan\n\n",kunci); } else{ printf("\ndata tidak ditemukan\n\n"); } printf("\n\n\n"); system("pause"); return 0; } Jika data pada array tidak diurutkan, apa hasilnya? Coba amati perbedaannya!

Dari soal di atas, berarti kita mempunyai array sebagai berikut: index [0] 2 [1] 3 [2] 5 [3] 7 [4] 9 [5] 10 [6] 12 [7] 13 [8] 15 [9] 18

Mencari hasil dari rumus posisi data yang kita tebak, dengan: low = index awal = 0

high = index akhir = 9 kunci = data yang dicari = 12 posisi data yang ditebak = 5,625 (diperoleh dari rumus pada teori singkat). Karena index merupakan bilangan bulat, maka hasil di atas dibulatkan ke bawah, menjadi 5. index low [0] 2 [1] 3 [2] 5 [3] 7 [4] 9 [5] 10 [6] 12 [7] 13 [8] 15 [9] 18 high

posisi data yang ditebak

Membandingkan nilai yang dicari dengan data tebakan (data pada posisi yang telah dihitung tadi) index [0] 2 [1] 3 [2] 5 [3] 7 [4] 9 [5] 10 [6] 12 12 [7] 13 [8] 15 [9] 18

?
posisi + 1. Dalam kasus ini, low berubah menjadi 6 index [0] 2 [1] 3 [2] 5 [3] 7 [4] 9 [5] 10

Karena data yang dicari lebih kecil dari data tebakan, maka nilai low berubah menjadi

[6] 12

[7] 13

[8] 15

[9] 18 posisi high

posisi data yang ditebak

posisi low yang baru

Menggunakan low yang baru, kita mencari data tebakan kembali dengan rumus pada teori singkat. Hasilnya, posisi data tebakan kita adalah 6. Artinya, data tebakan ada pada index ke-6 index [0] 2 [1] 3 [2] 5 [3] 7 [4] 9 [5] 10 [6] 12 [7] 13 [8] 15 [9] 18

posisi data yang ditebak Membandingkan kembali nilai yang dicari dengan data tebakan yang baru (data pada posisi yang telah dihitung tadi) index [0] 2 [1] 3 [2] 5 [3] 7 [4] 9 [5] 10 [6] 12 [7] 13 12 [8] 15 [9] 18

Ternyata data pada index ke-6 sama dengan data yang dicari. Berarti, data pada index ke-6 adalah data yang dicari index [0] 2 [1] 3 [2] 5 [3] 7 [4] 9 [5] 10 [6] 12 [7] 13 [8] 15 12 [9] 18

UNGUIDED
1. Berikut ini adalah gambar denah salah satu perumahan di Wonosari: Jl. T r i k o r a 1 3 5 7 9 11 13 15 17 19 kiri

Jalan Mawar 2 4 6 8 10 12 14 16 18 20 kanan

Anda diminta membuat program yang dapat mencari nomor rumah dan urutan ke berapa dari Jalan Trikora dan di sisi sebelah mana dari Jalan Mawar. Output:

2. Buatlah sebuah program yang dapat mencatat banyaknya huruf yang ingin dicari dalam sebuah kalimat (maksimal 30 karakter)! Output:

3. Buatlah program untuk mencari data pada array 2 dimensi (untuk mempermudah, gunakan array 3x3 saja)! Output:

CHALLENGE
Ibu Milkha adalah seorang bendahara RT dimana ia tinggal. Setiap bulan, RT itu selalu mengadakan arisan dan semua anggotanya menabung. Sudah tentu, ibu Milkha mencatat setiap uang tabungan yang ia terima dan dari siapa uang tersebut ia terima. Anda diminta untuk membantu Ibu Milkha untuk membuat sebuah program yang dapat mencari salah satu penabung berdasarkan nomor rumah penabung. Output:

HOMEWORK (OPTIONAL)
-

Anda mungkin juga menyukai