Algoritma Pencarian Biner adalah metode yang efisien untuk menemukan nilai tertentu dalam array yang diurutkan. Pendekatan ini membagi larik menjadi bagian yang lebih kecil dan terus membandingkan nilai di posisi tengah rentang pencarian dengan nilai target. Jika nilainya cocok, nilai yang diinginkan ditemukan; jika tidak, algoritme terus mempersempit rentang pencarian dan mengulangi proses hingga nilai ditemukan atau tidak ada lagi elemen yang tersisa untuk diperiksa.
Langkah:
- Menginisialisasi rentang pencarian: Mulai dengan memilih rentang pencarian dari posisi pertama
left
hingga posisi terakhirright
larik. - Temukan titik tengah: Hitung titik tengah dengan merata-ratakan
left
posisi dan kanan; ini adalah titik tengah dari rentang pencarian. - Bandingkan nilai: Bandingkan nilai di titik tengah dengan nilai target.
- Tangani hasil perbandingan: Jika nilai di titik tengah cocok dengan nilai target, kembalikan posisi ini. Jika nilai di titik tengah kurang dari nilai target, perbarui posisi kiri ke tengah + 1 untuk mencari bagian kanan. Jika nilai di titik tengah lebih besar dari nilai target, perbarui posisi kanan ke tengah- 1 untuk mencari separuh kiri.
- Ulangi: Ulangi langkah 2 hingga 4 hingga nilai ditemukan atau tidak ada lagi elemen yang diperiksa
left > right
.
Keuntungan dan kerugian
Keuntungan:
- Performa efisien: Kompleksitas waktu algoritme adalah O(log n), membuatnya sangat efisien untuk menangani kumpulan data besar.
- Efektif untuk kumpulan data besar: Pencarian Biner efektif dalam mengurangi jumlah elemen untuk diperiksa dengan cepat untuk kumpulan data besar.
Kekurangan:
- Hanya berlaku untuk larik terurut: Algoritme hanya bekerja pada larik terurut.
- Jumlah langkah variabel: Jumlah langkah yang diperlukan untuk menemukan nilai bergantung pada posisinya dalam larik, dan ini dapat memerlukan banyak langkah untuk nilai di dekat ujungnya.
Contoh: Pencarian Biner untuk menemukan nilai 12 dalam array yang diurutkan di PHP
function binarySearch($arr, $target) {
$left = 0;
$right = count($arr)- 1;
while($left <= $right) {
$mid = floor(($left + $right) / 2);
if($arr[$mid] == $target) {
return $mid; // Return the position of the value
} elseif($arr[$mid] < $target) {
$left = $mid + 1;
} else {
$right = $mid- 1;
}
}
return -1; // Value not found
}
$array = [2, 5, 8, 12, 15, 20, 30];
$targetValue = 12;
$result = binarySearch($array, $targetValue);
if($result != -1) {
echo "Value $targetValue found at position $result.";
} else {
echo "Value $targetValue not found in the array.";
}
Penjelasan Contoh
- Kami mulai dengan rentang pencarian awal dari posisi pertama
left = 0
hingga posisi terakhirright = 6
dari array. - Kami menghitung titik tengah(mid) dengan rata-rata posisi kiri dan kanan;
mid = 3
. Nilai di tengah adalah 12. - Kami membandingkan nilai di
mid(12
) dengan nilai target(12) dan menemukan kecocokan, jadi kami mengembalikan posisi 3. - Algoritme berakhir, dan kami menampilkan hasil "Nilai 12 ditemukan di posisi 3".