lgoritma
Penerapan terbanyak dari pencarian biner adalah untuk mencari sebuah nilai tertentu dalam sebuah list terurut. Jika dibayangkan, pencarian biner dapat dilihat sebagai sebuah permainan tebak-tebakan, kita menebak sebuah bilangan, atau nomor tempat, dari daftar (list) nilai.Pencarian diawali dengan 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. Berikut ini adalah pseudocode sederhana yang menentukan indeks (posisi) dari nilai yang diberikan dalam sebuah list berurut, a berada antara left dan right :
function binarySearch(a, value, left, right) if right <>return not found mid := floor((right-left)/2)+left if a[mid] = value return mid if value <>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 <>else left := mid+1 return not foundPada 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.Pencarian biner adalah sebuah algoritma logaritmik dan bekerja dalam waktu O(log n). Secara khusus, 1 + log2N pengulangan yang diperlukan untuk menghasilkan jawaban. Hal ini dianggap lebih cepat dibandingkan sebuah pencarian linear. Pencarian biner dapat diimplementasikan dengan rekursi atau iterasi, seperti yang terlihat di atas, walaupun pada kebanyakan bahasa pemrograman akan lebih elegan bila dinyatakan secara rekursif.
Contoh
Sebuah contoh aksi pencarian biner adalah sebuah permainan tebak-tebakan dimana seorang pemain harus menebak sebuah bilangan bulat positif yang dipilih oleh pemain lain di antara 1 dan N, dengan memanfaatkan jawaban pertanyaan berupa ya dan tidak. Misalnya N adalah 16 dan angka yang dipilih adalah 11, permainan dapat berjalan sebagai berikut.- Apakah angka lebih besar dari 8? (Ya)
- Apakah angka lebih besar dari 12? (Tidak)
- Apakah angka lebih besar dari 10? (Ya)
- Apakah angkat lebih besar dari 11? (Tidak)
Paling banyak ada pertanyaan yang dibutuhkan untuk mendapatkan angka tersebut, karena setiap pertanyaan menghilangkan setengah dari ruang pencarian. Sebagai catatan bahwa dibutuhkan kurang dari satu pertanyaan (iterasi) untuk algoritma umum, karena angka tersebut dibatasi oleh sebuah jangkauan tertentu.
Walaupun angka yang kita tebak sangat banyak, pada kasus tidak ada batas atas N, kita masih dapat menemukan angka paling banyak dalam langkah (dimana k adalah angka yang dipilih (yang tidak diketahui)), caranya adalah dengan pertama-tama menemukan sebuah batas atas dengan melipatduakannya. Sebaai contoh, jika angka tersebut adalah 11, kita dapat menggunakan urutan tebakan sebagai berikut untuk menemukannya:
- Apakah angka lebih besar dari 1? (Ya)
- Apakah angka lebih besar dari 2? (Ya)
- Apakah angka lebih besar dari 4? (Ya)
- Apakah angka lebih besar dari 8? (Ya)
- Apakah angka lebih besar dari 16? (Tidak, N=16, lakukan seperti di atas)
- Apakah angka lebih besar dari 12? (Tidak)
- Apakah angka lebih besar dari 10? (Ya)
- Apakah angka lebih besar dari 11? (Tidak)
Ada beberapa hal yang tidak terkait dengan komputer dimana sebuah pemilahan biner adalah cara tercepat untuk mengisolasi sebuah solusi yang dicari. Pada pemecahan sebuah permasalah dengan banyak kemungkinan penyebab, kita dapat mengubah setengah sangkaan, kita lihat apakah permasalahan masih terjadi dan tentukan bagian setengah berikutnya; ubah setengah sangkaan sisanya, dan seterusnya.
Contoh nyata lainnya: pada satu revisi di antara 500 revisi terakhir, sebuah paragraf penting terhapus dari sebuah artikel Wikipedia—pertanyaanya di revisi mana? Kita menghadapai paling banyak 500 opersi pembandingan, atau 9 pembandingan dengan pemilahan biner (2 pangkat 9, yaitu 512).
Sumber : Wikipedia
Tidak ada komentar:
Posting Komentar