Anda di halaman 1dari 4

Maudita Alteresti 2210100011

BINARY SEARCH

Penjelasan Binary Search merupakan salah satu algoritma pencarian yang tercepat. Kecepatan algoritma ini hanya bisa dikalahkan oleh teknik hashing. Untuk mencari jutaan data, Binary Search hanya butuh O(log N) kali pembandingan (sekitar 20 kali), sedangkan Linier Search butuh O(N) pembandingan (sekitar 500.000 kali). Tapi yang harus dicatat di sini, data yang dicari harus sudah terurut. Algoritma iteratif (contohnya yang menggunakan perputaran FOR, WHILE, dsb) pada umumnya dapat dengan mudah diubah ke dalam algoritma rekursif (memanggil dirinya sendiri). Keistimewaan algoritma iteratif adalah sederhana, cepat, dan menggunakan sedikit memori. Sedangkan pada kasus seperti menelusuri pohon, algoritma rekursif jelas lebih baik karena lebih mudah difahami. Pada prinsipnya, Binary Search adalah membandingkan Key (angka yang dicari) dengan angka yang berada tepat di tengah-tengah deretan angka yang sudah terurut. Jika sama, maka itulah yang dicari. Tapi jika tidak sama, maka deretan data dipecah menjadi dua blok: Blok bawah (kecil) dan blok atas (kecil). Lalu proses diulangi terhadap blok bawah atau blok atas, tergantung besarnya Key apakah lebih kecil ataukah lebih besar daripada data yang berada di tengah-tengah tadi. Pencarian diawali dengan menebak apakah data yang dicari berada ditengah-tengah data, kemudian membandingkan data yang dicari dengan data yang ada ditengah. Bila data yang ditengah sama dengan data yang dicari, berarti data ditemukan. Namun, bila data yang ditengah lebih besar dari data yang dicari, maka dapat dipastikan bahwa data yang dicari kemungkinan berada disebelah kiri dari data tengah dan data disebelah kanan data tengah dapat diabai. Upper bound dari bagian data kiri yang baru adalah indeks dari data tengah itu sendiri. Sebaliknya, bila data yang ditengah lebih kecil dari data yang dicari, maka dapat dipastikan bahwa data yang dicari kemungkinan besar berada disebelah kanan dari data tengah. Lower bound dari data disebelah kanan dari data tengah adalah indeks dari data tengah itu sendiri ditambah 1. Demikian seterusnya. memeriksa nilai yang ada pada posisi tengah list; oleh karena nilai-nilainya terurut, kita mengetahui apakah nilai terletak sebelum atau sesudah nilai yang di tengah tersebut, dan pencarian selanjutnya dilakukan terhadap setengah bagian dengan cara yang sama.

Algoritma Algoritma dalam bentuk pseudocode dari pencarian biner adalah sebagai berikut.

function binarySearch(a, value, left, right) if right < left return not found mid := floor((right-left)/2)+left if a[mid] = value return mid if value < a[mid] return binarySearch(a, value, left, mid-1) else return binarySearch(a, value, mid+1, right)

Karena pemanggilan fungsi di atas adalah rekursif ekor, fungsi tersebut dapat dituliskan sebagai sebuah pengulangan (loop), hasilnya adalah algoritma in-place:
function binarySearch(a, value, left, right) while left right mid := floor((right-left)/2)+left if a[mid] = value return mid if value < a[mid] right := mid-1 else left := mid+1

return not found

Pada kedua kasus, algoritma akan berakhir karena paa setiap pemanggilan rekursif atau pengulangan, jangkauan indeks right dikurang left akan selalu mengecil, dan akhirnya pasti akan menjadi negatif

Contoh kasus: Contoh dibawah adalah ilustrasi pencarian biner untuk huruf j

Kompleksitas kita akan menentukan jumlah perbandingan pada kondisi terburuk sebagai fungsi dari banyaknya suku dalam deretan n. Kita asumsikan terdapat n=2k buah elemen di dalam barisan yang berarti bahwa k = log(n). Jika n bukan pangkat 2 dari suatu bilangan, barisan tersebut dapat dianggap sebagai bagian dari barisan lain yang lebih besar, dimana 2k<n<2k+1. Pada siklus pertama dari loop

interval pencarian dibatasi pada (2k1) buah elemen, menggunakan dua operasi perbandingan. Pada siklus kedua, interval pencarian dibatasi pada sejumlah 2k-2 elemen, sekali lagi dengan dua

buah perbandingan. Proses ini diulangi terus hingga terdapat hanya satu buah (=20) 2. Algoritma, Kompleksitas dan Teori Bilangan 4 elemen tersisa dalam interval pencarian. Pada kondisi ini, sejumlah 2k perbandingan telah Kemudian, dilakukan perbandingan: while (i < j). Setelah itu keluar dari loop dan perbandingan akhir adalah:

if x = ai then location := i

Menentukan apakah elemen yang dicari sudah ketemu. Dengan demikian, total dari kompleksitas waktu untuk algoritma pencarian biner adalah 2k + 2 = 2 log(n) + 2.

Anda mungkin juga menyukai