Binary search adalah cara cepat untuk menemukan target dalam daftar yang sudah diurutkan. Anda memeriksa item tengah, menyingkirkan setengah dari nilai yang tersisa, lalu mengulanginya. Jika daftar tidak terurut, logika itu tidak berlaku.

Pada daftar yang urut menaik, aturannya sederhana: jika nilai tengah lebih kecil daripada target, cari ke kanan; jika lebih besar, cari ke kiri. Karena rentangnya terus menyusut sekitar setengah setiap kali, binary search berjalan dalam waktu O(logn)O(\log n).

Cara kerja binary search pada daftar terurut

Gunakan daftar terurut ini:

[3,7,12,18,24,31,39,45,52][3, 7, 12, 18, 24, 31, 39, 45, 52]

Misalkan targetnya adalah 3131.

Mulailah dengan seluruh rentang. Nilai tengahnya adalah 2424. Karena 31>2431 > 24, semua nilai di sebelah kiri 2424 dapat dibuang, sehingga pencarian berlanjut pada

[31,39,45,52][31, 39, 45, 52]

Sekarang nilai tengahnya adalah 3939. Karena 31<3931 < 39, semua nilai di sebelah kanan 3939 dapat dibuang, sehingga rentangnya menjadi

[31][31]

Sekarang nilai tengahnya adalah 3131, jadi pencarian berhenti. Gagasan pentingnya bukan hanya bahwa target ditemukan. Dalam dua perbandingan, rentang kandidat turun dari 99 nilai menjadi 11.

Mengapa binary search adalah O(logn)O(\log n)

Setiap perbandingan menghilangkan sekitar setengah dari kandidat yang tersisa. Setelah satu langkah, sekitar n/2n/2 item tersisa. Setelah dua langkah, sekitar n/4n/4 item tersisa. Setelah kk langkah, ukuran yang tersisa kira-kira

n2k\frac{n}{2^k}

Pencarian selesai ketika jumlah itu kira-kira 11, sehingga banyaknya langkah memenuhi

2kn2^k \approx n

Dengan mengambil log2\log_2 pada kedua sisi, diperoleh

klog2nk \approx \log_2 n

Itulah sebabnya binary search dapat diskalakan dengan baik. Pencarian linear mungkin memerlukan hingga nn pemeriksaan, tetapi binary search hanya memerlukan cukup banyak pemeriksaan untuk terus membagi dua rentang.

Berikut adalah versi iteratif standar dalam Python:

Butuh bantuan mengerjakan soal?

Unggah pertanyaanmu dan dapatkan solusi terverifikasi langkah demi langkah dalam hitungan detik.

Buka GPAI Solver →