![]() ![]() |
|
Vi è una grande differenza tra cercare fra dati
non ordinati e cercare entro un insieme di dati ordinati.
Se si deve cercare un numero in una sequenza di valori che si presentano in ordine arbitrario, non si può fare nulla per accelerare la ricerca. Si devono semplicemente scorrere tutti gli elementi, esaminandoli uno ad uno, fino a quando si trova una corrispondenza oppure si arriva in fondo all'elenco. Questa ricerca si chiama lineare o sequenziale.
|
![]() ![]() |
|
Ecco un programma che implementa la ricerca lineare attraverso un array a di numeri interi per trovare il valore v. La procedura alla fine restituisce l'indice della corrispondenza oppure -1 se v non è presente in a.
|
![]() ![]() |
|
Supponiamo ora di cercare un elemento in un array di interi che è stato precedentemente ordinato. Consideriamo ad esempio il seguente array:
e supponiamo di voler cercare il valore 123. L'ultimo valore nella prima metà dell'array (a[3]=100) è minore del valore cercato, quindi dovremo cercare la corrispondenza nella seconda metà dell'array:
L'ultimo valore della prima metà di questa sequenza (a[5]=290) è maggiore del valore cercato, quindi dovremo cercare la corrispondenza nella prima metà
L'ultimo valore della prima metà di questa sequenza (a[4]=115) è minore del valore cercato, quindi dobbiamo esaminare la seconda metà:
Ora possiamo constatare che non abbiamo una corrispondenza poiché 123 è diverso da 290. Questo processo di ricerca si chiama ricerca binaria.
|
![]() ![]() |
|
Ecco un programma che implementa la ricerca binaria in un array a di numeri interi ordinati per trovare il valore v. La procedura alla fine restituisce l'indice della corrispondenza oppure -1 se v non è presente in a.
|
![]() ![]() |
|
![]() ![]() |
Supponiamo che l'array a contenga n elementi.
Dunque, se si devono eseguire molte ricerche su uno stesso array, conviene prima ordinarlo e poi usare l'algoritmo di ricerca binaria.
|