RICERCA BINARIA O DICOTOMICA

annuncio pubblicitario
A cura di Valeria Valecchi
ORGANIZZAZIONE AD ACCESSO DIRETTO
(o random o relativa)
Un file si dice organizzato in modo diretto quando è
possibile accedere ad un singolo record specificato
senza dover scandire tutto il file.
E’
possibile
accedere
ai
record
direttamente,
specificando qual è la loro posizione relativamente
all’inizio dell’archivio stesso.
Problemi di ricerca
 L’organizzazione relativa è ottima quando si conosce a priori la
posizione del record da leggere e/o da scrivere
 Le cose si complicano quando la chiave di accesso al record non è
la sua posizione. Esempio: archivio anagrafico con chiave di
accesso Cognome + Nome
 Un primo approccio è la ricerca sequenziale
 Ma se la velocità di ricerca è prioritaria, si può usare la ricerca
binaria o dicotomica. L’archivio deve essere fisicamente
ordinato sul campo di ricerca (ad esempio il Cognome + Nome)
e che non deve avere record vuoti.
RICERCA BINARIA (o dicotomica)
Algoritmo di ricerca che cerca un elemento all'interno di un
array che deve essere ordinato in ordine crescente,
effettuando mediamente meno confronti rispetto ad una
ricerca sequenziale, e quindi più rapidamente rispetto ad
essa.
La ricerca dicotomica richiede un accesso casuale ai dati in
cui cercare.
L'algoritmo è simile al metodo usato per trovare
una parola sul dizionario: sapendo che il
vocabolario è ordinato alfabeticamente, l'idea è
quella di iniziare la ricerca non dal primo elemento,
ma da quello centrale, cioè a metà del dizionario.
Si confronta questo elemento con quello cercato:
 se corrisponde, la ricerca termina indicando che
l'elemento è stato trovato;
 se è superiore, la ricerca viene ripetuta sugli elementi
precedenti (ovvero sulla prima metà del dizionario),
scartando quelli successivi;
 se è inferiore, la ricerca viene ripetuta sugli elementi
successivi (ovvero sulla seconda metà del dizionario),
scartando quelli precedenti.
Se non è necessario effettuare frequentemente
operazioni di inserimento e cancellazioni o non è affatto
necessario effettuarle e non si vuole usare troppa
memoria è possibile implementare un albero di ricerca
binario su un array ordinato, con la restrizione che il
numero degli elementi sia
con
.
Esempio:
Esempio:
inizio=1
fine=15
Inizio ciclo
indice= (inizio+fine)/2 = (1+15)/2 = 8
Se chiave=key(indice) allora trovato
altrimenti
Se chiave>key(indice) allora inizio = indice + 1 = 8+1 = 9
Se chiave<key(indice) allora fine = indice - 1 = 8-1 = 7
Fine ciclo
Se si arriva al punto che tutti gli elementi
vengono scartati, la ricerca termina indicando
che il valore non è stato trovato.
Scarica