1 / 10

RICERCA IN UN VETTORE

RICERCA IN UN VETTORE. Metodi basati sul confronto di chiavi. Si confrontano gli elementi del vettore V con l’elemento ( chiave K ) che si vuole ricercare . ELEMENTI UTILIZZATI NELL’ANALISI: Vettore V di dimensione N Chiave K Indice i

semah
Download Presentation

RICERCA IN UN VETTORE

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. RICERCA IN UN VETTORE

  2. Metodi basati sul confronto di chiavi Si confrontano gli elementi del vettore V con l’elemento (chiave K) che si vuole ricercare. ELEMENTI UTILIZZATI NELL’ANALISI: • Vettore V di dimensione N • Chiave K • Indice i • t = indice che punta all’inizio del vettore in cui ricercare • u= indice che punta alla fine del vettore in cui ricercare

  3. 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).

  4. RICERCA LINEARE: FLOW-CHART start i = 0 i = i+1 K ≠ V [i] and i < = N si no no si i <=N Elemento Non trovato Elemento trovato end

  5. RICERCA LINEARE: Numero Confronti Due valutazioni diverse a seconda dell’esito 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 è : 1+2+3+4+5+….. N = N(N+1)/2 Il numero medio di confronti risulta (N+1)/2 • ricerca senza successo: l’algoritmo esamina sempre tutto il vettore, quindi il numero di confronti è sempre N

  6. 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

  7. RICERCA BINARIA (detta dicotomica o logaritmica) • Si applica su vettori ordinati • Si confronta la chiave K con l’elemento che si trova a metà del vettore. Se l’elemento 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 dell’elemento che si trova a metà. • Il procedimento continua iterativamente in modo da suddividere le sottotabelle via via individuate. • La ricerca termina con successo quando l’elemento 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.

  8. RICERCA DICOTOMICA: FLOW-CHART start t = 1 u = N i =  (t+u)/2  K ≠ V [i] si no K > V [i] no si u = i - 1 t = i + 1 t <= u and K ≠ V [i] si no no K ≠ V [i] si Elemento trovato Elemento Non trovato end

  9. 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"); }

  10. RICERCA DICOTOMICA: Numero Confronti • L’algoritmo è il più veloce tra quelli di ricerca basati sul confronto di chiavi. • In un vettore di dimensione N = 2h -1 l’algoritmo deve compiere h=log2(N+1) passi(e quindi confronti) per la ricerca senza successo, mentre i confronti possono essere di meno per la ricerca con successo.

More Related