RICERCA IN UN VETTORE
Metodi basati sul confronto di chiavi Si confrontano gli elementi del vettore V con lelemento (chiave K) che si vuole ricercare. ELEMENTI UTILIZZATI NELLANALISI: Vettore V di dimensione N Chiave K Indice i t = indice che punta allinizio del vettore in cui ricercare u= indice che punta alla fine del vettore in cui ricercare
RICERCA LINEARE Si confronta ripetutamente la chiave K con ciascuno degli elementi del vettore finché non si trova V(i) = K (ricerca con successo) oppure finché non sono stati considerati tutti gli elementi del vettore senza trovarne nessuno uguale a K (ricerca senza successo).
start i = 0 i = i+1 K V [i] and i < = N si no i <=N sino Elemento trovato Elemento Non trovato end RICERCA LINEARE: FLOW- CHART
RICERCA LINEARE: Numero Confronti Due valutazioni diverse a seconda dellesito della ricerca: ricerca con successo: si fa riferimento al numero medio di confronti, che si ottiene dividendo il numero totale di confronti necessari per ricercare tutti gli elementi per il numero degli elementi stessi. Siccome per individuare il primo elemento si effettua un confronto, per il secondo due e così via, il numero totale di confronti è : ….. N = N(N+1)/2 Il numero medio di confronti risulta (N+1)/2 ricerca senza successo: lalgoritmo esamina sempre tutto il vettore, quindi il numero di confronti è sempre N
RICERCA IN VETTORI ORDINATI Vantaggio: Il numero di confronti in caso di ricerca senza successo è lo stesso che nella ricerca con successo (N+1)/2, perché si procede alla scansione del vettore finché K V[i]. A questo punto o K= V[i], e la ricerca è con successo, oppure si possono interrompere i confronti, e la ricerca risulta senza successo. Pertanto si determina il numero medio di confronti come in caso di successo
RICERCA BINARIA (detta dicotomica o logaritmica) Si applica su vettori ordinati Si confronta la chiave K con lelemento che si trova a metà del vettore. Se lelemento individuato non è uguale a quello cercato si prosegue la ricerca nel semivettore inferiore o superiore a seconda che la chiave K sia più piccola o più grande dellelemento che si trova a metà. Il procedimento continua iterativamente in modo da suddividere le sottotabelle via via individuate. La ricerca termina con successo quando lelemento V[i] considerato ad un certo passo è proprio uguale a K. La ricerca termina con insuccesso quando la parte di vettore considerata è costituita da un solo elemento.
start t = 1 u = N K V [i] i = (t+u)/2 K > V [i] t = i + 1u = i - 1 si no t <= u and K V [i] Elemento Non trovato Elemento trovato end sino RICERCA DICOTOMICA: FLOW-CHART si no K V [i]
RICERCA DICOTOMICA: CODICE //Ricerca dicotomica di un brano(key) in un elenco di //titoli(ptot) con estremi t ed u void ricercabin(char key[30], brano ptot[200], int t, int u) { int i; i=(u+t)/2; if ((t<=u) && (strcmp(key, ptot[i].titolo)!= 0)) { if ((strcmp(key, ptot[i].titolo) > 0)) t=i+1; else u=i-1; ricercabin(key, ptot, t, u); } else if ((strcmp(key, ptot[i].titolo)== 0) ) printf("Elemento trovato nel vettore alla posizione %d", i+1); else printf("Elemento non trovato nel vettore"); }
RICERCA DICOTOMICA: Numero Confronti Lalgoritmo è il più veloce tra quelli di ricerca basati sul confronto di chiavi. In un vettore di dimensione N = 2 h -1 lalgoritmo deve compiere h=log 2 (N+1) passi(e quindi confronti) per la ricerca senza successo, mentre i confronti possono essere di meno per la ricerca con successo.