Minggu, 12 Desember 2010

Binary Search

Algoritma binary search adalah jenis algoritma bertipe devide and conquer yang diciptakan untuk mereduksi jumlah perbandingan secara drastis dengan cara menentukan batas daerah solusi lalu menyelesaikan (solve it) secara berulang (recursive) sampai data ditemukan. Syarat wajib bekerjanya algoritma binary search adalah data harus dalam kondisi berurutan agar proses pencarian bisa dilakukan. 

Gambar: Proses pencarian pada Binary search
Algoritma binary search:
  1. Tentukan batas daerah solusi awal, batas kiri = 1 dan batas kanan = jumlah data (contoh 15).
  2. Tentukan posisi tengah antara batas kiri dan batas kanan.
  3. Jika data tengah = data dicari, maka cetak "Data ketemu di posisi tengah", dan pencarian selesai.
  4. Jika tidak, bandingkan lagi, jika data tengah > data dicari, maka { daerah solusi menyempit di antara batas kiri dan batas tengah } batas kanan tengah, jika tidak maka { daerah solusi menyempit antara batas tengah dan batas kanan } batas kiri tengah.
  5. Selama batas kiri tidak berdempetan dengan batas kanan, jalankan baris ke 3, jika tidak ,maka cetak "Data tidak ketemu".
  6. Selesai.
Gambar: Hasil running binary search
Kronologis pencarian contoh data di atas


  1. Dicari kosakata "access" pada 15 data yang berurutan dengan posisi kiri = 1, posisi kanan = 15, sehingga didapat posisi tengah = 7, yaitu "abuse".
  2. Karena data tengah ("abuse") <  data yg dicari ("access") maka posisi bergeser, posisi kiri = 7, posisi kanan = 15, sehingga didapat posisi tengah = 10, yaitu "accent".
  3. Karena data tengah ("accent") <  data yg dicari ("access") maka posisi bergeser kembali, posisi kiri = 10, posisi kanan = 15, sehingga didapat posisi tengah = 12, yaitu "access".
  4. Karena data tengah ("access") =  data yg dicari ("access" maka cetak "data ketemu di posisi tengah" sehingga proses pencarian berhenti. 
  5. Jika posisi kiri dan posisi kanan berdempetan, maka sudah tidak ada lagi anggota himpunan solusi sehingga dapat disimpulkan bahwa data tidak ketemu.
Kode Program: VB.Net
 

Algoritma binary search ini sangat mangkus (efisien waktunya) karena kecepatannya meningkat secara eksponensial seiring dengan meningkatnya jumlah data. Jika jumlah data = 15, maka proses perbandingan maksimal = 4x.  Jika jumlah data = 4294967296 (4 milyar) maka hanya dibutuhkan perbandingan 32 kali saja.

Berbeda dengan Algoritma Linear search yang membutuhkan siklus perbandingan yang sangat lama  Jika jumlah data = 15, maka proses perbandingan rata-rata 7x , namun bila jumlah data =  4294967296 (4 milyar) maka perbandingan rata-rata sebanyak 2 milyar kali. Kompleksitas waktu rata2 algoritma linear search = 1/2 n, sedangkan kompleksitas maksimal algoritma binary search = log2 n, dimana n adalah jumlah data.


Berbeda drastiskan! Algoritma binary search ini biasanya diterapkan pada aplikasi pencarian data seperti software kamus yang pernah penulis buat. Penulis juga menjadikan topik searching ini dalam kursus pemrograman yang akan dibuka pada bulan februari 2011.

Gambar: Software kamus di PC
  
Gambar: Software kamus di handphone

Gambar: Closer word suggestion bila data tidak ketemu
 
Gambar: Hasil pencarian

1 komentar: