Algoritem binarnega iskanja je učinkovita metoda za iskanje določene vrednosti v razvrščeni matriki. Ta pristop razdeli matriko na manjše dele in nenehno primerja vrednost na srednjem položaju iskalnega obsega s ciljno vrednostjo. Če se vrednosti ujemajo, je želena vrednost najdena; v nasprotnem primeru algoritem nadaljuje z oženjem obsega iskanja in ponavlja postopek, dokler ni najdena vrednost ali ni več elementov za pregled.
Koraki:
- Inicializirajte obseg iskanja: Začnite z izbiro obsega iskanja od prvega
left
do zadnjega položajaright
matrike. - Poiščite srednjo točko: izračunajte srednjo točko tako, da izračunate povprečje
left
položajev in desno; to je srednja točka obsega iskanja. - Primerjaj vrednosti: primerjajte vrednost na srednji točki s ciljno vrednostjo.
- Rezultat primerjave ročaja: Če se vrednost na srednji točki ujema s ciljno vrednostjo, vrnite ta položaj. Če je vrednost na srednji točki manjša od ciljne vrednosti, posodobite levi položaj na sredino + 1, da poiščete desno polovico. Če je vrednost na srednji točki večja od ciljne vrednosti, posodobite desni položaj na sredino- 1 za iskanje po levi polovici.
- Ponavljanje: Ponavljajte korake od 2 do 4, dokler ni vrednost najdena ali ni več elementov za preverjanje
left > right
.
Prednosti in slabosti
Prednosti:
- Učinkovito delovanje: Časovna zapletenost algoritma je O(log n), zaradi česar je zelo učinkovit za obdelavo velikih naborov podatkov.
- Učinkovito za velike nabore podatkov: Binarno iskanje je učinkovito pri zmanjševanju števila elementov, ki jih je treba hitro pregledati za velike nabore podatkov.
Slabosti:
- Velja samo za razvrščene nize: Algoritem deluje samo na razvrščene nize.
- Spremenljivo število korakov: število korakov, potrebnih za iskanje vrednosti, je odvisno od njenega položaja v matriki in lahko traja veliko korakov za vrednosti blizu koncev.
Primer: binarno iskanje za iskanje vrednosti 12 v razvrščeni matriki v 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.";
}
Razlaga primera
- Začnemo z začetnim iskalnim obsegom od prvega položaja
left = 0
do zadnjega položajaright = 6
matrike. - Srednjo točko(mid) izračunamo s povprečenjem leve in desne lege;
mid = 3
. Vrednost na sredini je 12. - Primerjamo vrednost pri
mid(12
) s ciljno vrednostjo(12) in najdemo ujemanje, tako da vrnemo položaj 3. - Algoritem se konča in izpišemo rezultat "Vrednost 12 najdena na položaju 3."