L'algoritmo di ricerca binaria è un metodo efficiente per trovare un valore specifico in un array ordinato. Questo approccio divide l'array in parti più piccole e confronta continuamente il valore nella posizione centrale dell'intervallo di ricerca con il valore target. Se i valori corrispondono, viene trovato il valore desiderato; in caso contrario, l'algoritmo continua a restringere l'intervallo di ricerca e ripete il processo finché non viene trovato il valore o non rimangono più elementi da esaminare.
Passi:
- Inizializza l'intervallo di ricerca: iniziare selezionando l'intervallo di ricerca dalla prima
left
all'ultima posizioneright
dell'array. - Trova il punto medio: calcola il punto medio calcolando la media delle
left
posizioni e giuste; questo è il punto medio dell'intervallo di ricerca. - Confronta valori: confronta il valore nel punto centrale con il valore target.
- Gestisci il risultato del confronto: se il valore nel punto centrale corrisponde al valore di destinazione, restituisci questa posizione. Se il valore nel punto centrale è inferiore al valore target, aggiorna la posizione sinistra al centro + 1 per cercare nella metà destra. Se il valore nel punto centrale è maggiore del valore di destinazione, aggiorna la posizione destra al centro- 1 per cercare nella metà sinistra.
- Ripeti: ripetere i passaggi da 2 a 4 finché non viene trovato il valore o non ci sono più elementi da controllare
left > right
.
Vantaggi e svantaggi
Vantaggi:
- Prestazioni efficienti: la complessità temporale dell'algoritmo è O(log n), il che lo rende altamente efficiente per la gestione di set di dati di grandi dimensioni.
- Efficace per set di dati di grandi dimensioni: la ricerca binaria è efficace nel ridurre il numero di elementi da esaminare rapidamente per set di dati di grandi dimensioni.
Svantaggi:
- Applicabile solo agli array ordinati: l'algoritmo funziona solo su array ordinati.
- Numero variabile di passaggi: il numero di passaggi necessari per trovare il valore dipende dalla sua posizione nell'array e può richiedere molti passaggi per i valori vicini alle estremità.
Esempio: ricerca binaria per trovare il valore 12 in un array ordinato in 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.";
}
Spiegazione dell'esempio
- Iniziamo con l'intervallo di ricerca iniziale dalla prima
left = 0
all'ultima posizioneright = 6
dell'array. - Calcoliamo il punto medio(mid) facendo la media delle posizioni sinistra e destra;
mid = 3
. Il valore a metà è 12. - Confrontiamo il valore in
mid(12
) con il valore target(12) e troviamo una corrispondenza, quindi restituiamo la posizione 3. - L'algoritmo termina e viene emesso il risultato "Valore 12 trovato nella posizione 3".