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.