Algoritmen for binær søk er en effektiv metode for å finne en spesifikk verdi i en sortert matrise. Denne tilnærmingen deler opp arrayet i mindre deler og sammenligner kontinuerlig verdien i midtposisjonen av søkeområdet med målverdien. Hvis verdiene stemmer overens, blir ønsket verdi funnet; Ellers fortsetter algoritmen å begrense søkeområdet og gjentar prosessen til verdien er funnet eller det ikke er flere elementer igjen å undersøke.
Trinn:
- Initialiser søkeområdet: Begynn med å velge søkeområdet fra den første posisjonen
left
til den siste posisjonenright
i arrayen. - Finn midtpunktet: Beregn midtpunktet ved å beregne gjennomsnittet av
left
og høyre posisjoner; dette er midtpunktet i søkeområdet. - Sammenlign verdier: Sammenlign verdien på midtpunktet med målverdien.
- Håndter sammenligningsresultat: Hvis verdien på midtpunktet samsvarer med målverdien, returner denne posisjonen. Hvis verdien ved midtpunktet er mindre enn målverdien, oppdater venstre posisjon til midten + 1 for å søke i høyre halvdel. Hvis verdien ved midtpunktet er større enn målverdien, oppdater høyre posisjon til midten- 1 for å søke i venstre halvdel.
- Gjenta: Gjenta trinn 2 til 4 til verdien er funnet eller det ikke er flere elementer å sjekke
left > right
.
Fordeler og ulemper
Fordeler:
- Effektiv ytelse: Tidskompleksiteten til algoritmen er O(log n), noe som gjør den svært effektiv for håndtering av store datasett.
- Effektivt for store datasett: Binært søk er effektivt for å redusere antall elementer som skal undersøkes raskt for store datasett.
Ulemper:
- Gjelder bare for sorterte matriser: Algoritmen fungerer kun på sorterte matriser.
- Variabelt antall trinn: Antall trinn som kreves for å finne verdien avhenger av dens posisjon i matrisen, og det kan ta mange trinn for verdier nær enden.
Eksempel: Binært søk for å finne verdien 12 i en sortert matrise i 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.";
}
Forklaring av eksempelet
- Vi starter med det innledende søkeområdet fra den første posisjonen
left = 0
til den siste posisjonenright = 6
i matrisen. - Vi beregner midtpunktet(midten) ved å beregne gjennomsnittet av venstre og høyre posisjon;
mid = 3
. Verdien ved midten er 12. - Vi sammenligner verdien ved
mid(12
) med målverdien(12) og finner et samsvar, så vi returnerer posisjon 3. - Algoritmen avsluttes, og vi sender ut resultatet "Verdi 12 funnet ved posisjon 3."