Algoritmo di ricerca binaria con ESEMPIO

⚡ Riepilogo intelligente

L'algoritmo di ricerca binaria trova un elemento in un elenco ordinato dimezzando ripetutamente l'intervallo di ricerca e confrontando l'elemento cercato con quello centrale. Chiamato anche ricerca a intervalli dimezzati o logaritmica, è molto più veloce rispetto alla scansione di ogni singolo elemento.

  • ???? Dati ordinati: La ricerca binaria funziona solo su un elenco di elementi ordinato.
  • ➗ Dimezzamento: Ad ogni passaggio, il valore target viene confrontato con il valore centrale e viene scartata metà dell'intervallo.
  • ⚡ Logaritmo: La ricerca viene eseguita in tempo O(log n), molto più velocemente della ricerca lineare.
  • 🎯 Indice intermedio: Il centro si trova come la parte intera di (sinistra + destra) divisa per due.
  • 🔁 Iterativo: Il processo si ripete finché l'elemento non viene trovato o l'intervallo non è vuoto.

Algoritmo di ricerca binaria con esempio

Prima di imparare la ricerca binaria, impariamo cos'è la ricerca.

Cos'è la ricerca?

La ricerca è un'utilità che consente all'utente di trovare documenti, file, contenuti multimediali o qualsiasi altro tipo di dati contenuti in un database. La ricerca funziona secondo il semplice principio di abbinare i criteri ai record e di visualizzarli all'utente. In questo modo funziona la funzione di ricerca più elementare.

Cos'è la ricerca binaria?

La ricerca binaria è un tipo avanzato di algoritmo di ricerca che trova e recupera dati da un elenco ordinato di elementi. Il suo principio di funzionamento principale consiste nel dividere i dati nell'elenco a metà finché non viene individuato il valore richiesto e visualizzato all'utente nel risultato della ricerca. La ricerca binaria è comunemente nota come ricerca a metà intervallo ricerca logaritmica.

Come funziona la ricerca binaria?

La ricerca binaria funziona nel modo seguente:

  • Il processo di ricerca inizia individuando l'elemento centrale dell'array di dati ordinato.
  • Dopodiché, il valore della chiave viene confrontato con l'elemento.
  • Se il valore della chiave è inferiore all'elemento centrale, la ricerca analizza i valori superiori all'elemento centrale per confrontarli e trovare una corrispondenza.
  • Nel caso in cui il valore della chiave sia maggiore dell'elemento centrale, la ricerca analizza i valori inferiori all'elemento centrale per confrontarli e trovare una corrispondenza.

Algoritmo di ricerca binaria (pseudocodice)

La ricerca binaria può essere scritta come una breve routine iterativa. Mantiene due puntatori, basso e alto, e restringe l'intervallo finché non viene trovato l'obiettivo o l'intervallo non è vuoto.

binarySearch(array, target)
    low = 0
    high = length(array) - 1
    while low <= high
        mid = (low + high) / 2      // floor value
        if array[mid] == target
            return mid
        else if array[mid] < target
            low = mid + 1
        else
            high = mid - 1
    return -1              // target not found

La routine restituisce l'indice del target in caso di successo e -1 quando il valore non è presente. Poiché l'intervallo si dimezza ad ogni passaggio, il ciclo viene eseguito al massimo log₂(n) volte.

Esempio di ricerca binaria

Prendiamo l'esempio di un dizionario. Se devi trovare una certa parola, nessuno esamina ogni parola in modo sequenziale, ma individua casualmente le parole più vicine per cercare la parola richiesta.

Esempio di ricerca binaria

L'immagine sopra illustra quanto segue:

  1. Hai una matrice di 10 cifre e l'elemento 59 deve essere trovato.
  2. Tutti gli elementi sono contrassegnati da un indice da 0 a 9. Ora, si calcola il valore centrale dell'array. Per farlo, si prendono i valori più a sinistra e più a destra dell'indice e li si divide per 2. Il risultato è 4.5, ma si prende la parte intera inferiore. Quindi il valore centrale è 4.
  3. L'algoritmo elimina tutti gli elementi dal centro (4) al limite inferiore, perché 59 è maggiore di 24, e ora l'array è composto da soli 5 elementi.
  4. Ora, 59 è maggiore di 45 e minore di 63. Il valore centrale è 7. Quindi il valore dell'indice di destra diventa il valore centrale - 1, che è uguale a 6, e il valore dell'indice di sinistra rimane lo stesso di prima, cioè 5.
  5. A questo punto, sai che 59 viene dopo 45. Quindi, anche l'indice sinistro, che è 5, diventa medio.
  6. Queste iterazioni continuano finché l'array non viene ridotto a un solo elemento o l'elemento da trovare diventa il centro dell'array.

esempio 2

Analizziamo il seguente esempio per comprendere il funzionamento della ricerca binaria.

Esempio di ricerca binaria

  1. Hai una serie di valori ordinati che vanno da 2 a 20 e devi individuare 18.
  2. La media tra il limite inferiore e quello superiore è (l + r) / 2 = 4. Il valore cercato è maggiore del valore medio, che è 4.
  3. I valori dell'array inferiori al valore medio vengono esclusi dalla ricerca, mentre vengono cercati i valori superiori al valore medio pari a 4.
  4. Questo è un processo di divisione ricorrente finché non viene trovato l'oggetto effettivo da cercare.

Perché abbiamo bisogno della ricerca binaria?

I seguenti motivi rendono la ricerca binaria una scelta migliore come algoritmo di ricerca:

  • La ricerca binaria funziona in modo efficiente su dati ordinati, indipendentemente dalle dimensioni dei dati.
  • Invece di eseguire la ricerca esaminando i dati in sequenza, l'algoritmo binario accede in modo casuale ai dati per trovare l'elemento richiesto. Ciò rende i cicli di ricerca più brevi e più accurati.
  • La ricerca binaria esegue confronti tra dati ordinati basandosi su un principio di ordinamento anziché utilizzare confronti di uguaglianza, che sono più lenti e per lo più imprecisi.
  • Dopo ogni ciclo di ricerca, l'algoritmo divide a metà la dimensione dell'array; pertanto, nell'iterazione successiva, lavorerà solo sulla metà rimanente dell'array.

Scopri il nostro prossimo tutorial su Ricerca lineare: Python, C++ Esempio.

Ricerca binaria vs ricerca lineare

La ricerca binaria e la ricerca lineare sono i due metodi più comuni per trovare un valore in una collezione. La tabella seguente evidenzia le differenze tra i due:

Aspetto Ricerca binaria Ricerca lineare
Requisito dei dati Richiede dati ordinati Funziona con dati ordinati o non ordinati
Metodo Dimezza il raggio di ricerca a ogni passaggio Verifica ogni elemento in sequenza
Complessità temporale O (log n) O (n)
migliori per Grandi insiemi di dati ordinati Insiemi di dati piccoli o non ordinati

In sintesi, la ricerca binaria è molto più veloce su grandi quantità di dati ordinati, mentre la ricerca lineare è più semplice ed è l'unica opzione quando i dati non sono ordinati.

DOMANDE FREQUENTI

La ricerca binaria consente ricerche rapide in strutture ordinate alla base dei sistemi di intelligenza artificiale, come ad esempio la ricerca di soglie, la regolazione di iperparametri in un intervallo o l'individuazione di un valore in un indice ordinato di embedding. La sua velocità O(log n) mantiene efficienti queste ricerche.

Sì. Gli assistenti IA possono scrivere ricerche binarie iterative o ricorsive in Python, Java, o C++ da una semplice descrizione. Fai attenzione ai classici errori di uno e di overflow durante il calcolo dell'indice centrale e testa con casi limite.

La ricerca binaria ha una complessità temporale di O(log n) perché dimezza l'intervallo di ricerca ad ogni confronto. La sua complessità spaziale è O(1) per la versione iterativa e O(log n) per la versione ricorsiva a causa dello stack di chiamate.

No. La ricerca binaria si basa sull'ordinamento dei dati per poter decidere quale metà scartare. Su dati non ordinati è necessario ordinarli prima oppure utilizzare la ricerca lineare, che controlla ogni elemento in sequenza.

Riassumi questo post con: