0
Dipartimento Ingegneria Chimica Materiali Ambiente             Abilità Informatiche                  Lezione 19           ...
Docente        Antonino               StelitanoTutor          Da definireLezioni        Lunedì             14:00 – 17:30 a...
Gli algoritmi di ricercaPer ricerca si intende, qui il procedimento di localizzazione di una particolareinformazione in un...
La Ricerca Sequenziale – L’Algoritmo    Se non abbiamo alcuna informazione circa lordine    degli elementi nellinsieme, lu...
La Ricerca sequenziale – l’AlgoritmoL’Algoritmo può essere formalizzato effettuando le seguenti operazioni:1) lettura dal ...
La ricerca sequenziale codice 1/2#include <stdio.h>#define MAXDIM 20 // definisco la dimensione massima del vettoremain(){...
La ricerca sequenziale codice 1/2// Inserimento del valore da cercare ( la chiave K )printf("Inserire lelemento da cercare...
La ricerca dicotomica o binaria    Se la sequenza è ordinata si può effettuare una    ricerca più efficiente che mi permet...
La Ricerca Dicotomica – L’AlgoritmoL’Algoritmo può essere descritto mediante i seguenti passi :1) Si individua l’elemento ...
Esempio numerico :                Valore cercato           26      2         3   6   12   16    21   24     26   28    30 ...
•  La ricerca termina con successo quando l’elemento   mediano V[i] considerato ad un certo passo è proprio   uguale a K.•...
med = [ (inf+sup)/2 ]                   K ≠ V [med]                       and            no                    inf < sup  ...
Ricerca dicotomica codice 1/2#include <stdio.h>#define MAXDIM 20 // definisco la dimensione massima del vettoremain(){ // ...
Ricerca dicotomica codice 2/2// Inserimento del valore da cercare ( la chiave K )printf("Inserire lelemento da cercare : "...
confronto La Ricerca Sequenziale• ricerca con successo:Nel caso migliore ho un solo confronto e in quello    peggiore N  I...
confrontoEsempio : Se dovessimo cercare un elemento in un insieme  di 1.000.000 di elementi, nei casi più sfortunati con  ...
Upcoming SlideShare
Loading in...5
×

Lezione 19 (18 aprile 2012) ricerca

190

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
190
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
13
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "Lezione 19 (18 aprile 2012) ricerca"

  1. 1. Dipartimento Ingegneria Chimica Materiali Ambiente Abilità Informatiche Lezione 19 18 Aprile 2012 Prof. Antonino Stelitano
  2. 2. Docente Antonino StelitanoTutor Da definireLezioni Lunedì 14:00 – 17:30 aula 16 Lab. Paolo Ercoli Mercoledì 15:45 – 19:00 aula 17 Lab. Paolo ErcoliRicevimento: Per antonino.stelitano@uniroma1.it appuntamento stelitano.a@libero.itSito web: http://w3.uniroma1.it/ab_informatiche/
  3. 3. Gli algoritmi di ricercaPer ricerca si intende, qui il procedimento di localizzazione di una particolareinformazione in un elenco di dati.Il problema della ricerca in termini generali :• Dato un insieme L = {a ,a ,...,a } di n elementi distinti e un elemento x (elemento chiave ), determinare se x appartiene allinsieme.Il metodo di ricerca dipende da come le informazioni sono organizzate, esistonodue possibili approcci :Ricerca Sequenziale – serve per ricercare i dati in un vettore NON ordinatoRicerca Binaria o Dicotomica – serve nel caso in cui i dati nel vettore siano giàordinati 3
  4. 4. La Ricerca Sequenziale – L’Algoritmo Se non abbiamo alcuna informazione circa lordine degli elementi nellinsieme, lunico metodo per localizzare un particolare elemento è una ricerca lineare cioè si parte dal primo elemento e si procede esaminando uno per uno tutti gli elementi fino a quando non si trova l’elemento cercato oppure fino a quando non sono stati letti tutti gli elementi dell’insieme.4
  5. 5. La Ricerca sequenziale – l’AlgoritmoL’Algoritmo può essere formalizzato effettuando le seguenti operazioni:1) lettura dal primo elemento del vettore V;2) confronto ripetuto della chiave K con ciascuno degli elementi del vettore;3) La lettura termina quando è soddisfatto un confronto ossia si trova i-esimo elemento = K ( ricerca con successo ) oppure quando si è raggiunto l’ultimo elemento del vettore ( ricerca senza successo ).Osservazione : Abbiamo bisogno di un indice che individui l’elemento dell’insieme considerato nel confronto 5
  6. 6. La ricerca sequenziale codice 1/2#include <stdio.h>#define MAXDIM 20 // definisco la dimensione massima del vettoremain(){ int i,K,N; // dichiarazione delle variabili int V[MAXDIM]; // dichiarazione delle variabili do{ printf("n Inserire la dimensione del vettore non superiore a %dn",MAXDIM); // inserimento del valore da tastiera scanf("%d",&N); }while(N>MAXDIM);// inserimento del vettore for (i=0;i<N;i++) { printf("Inserire lelemento %d : ",i+1); scanf("%d",&V[i]); }6
  7. 7. La ricerca sequenziale codice 1/2// Inserimento del valore da cercare ( la chiave K )printf("Inserire lelemento da cercare : ");scanf("%d",&K);// la variabile i è stata già usata, è necessario un nuovo assegnamentoi=0;// lettura degli elementi del vettore partendo dal primo V[0]while( K != V[i] && i<N ){ // leggere lelemento successivo dellarray V i = i + 1;}//risultato della ricercaif ( i<N ) printf("Elemento trovato in posizione %dn", i+1);else printf("Elemento non trovaton");} // Fine del main7
  8. 8. La ricerca dicotomica o binaria Se la sequenza è ordinata si può effettuare una ricerca più efficiente che mi permette di individuare l’elemento cercato senza dover scandire tutti gli elementi del vettore. L’algoritmo di ricerca binaria dopo ogni confronto scarta metà degli elementi del vettore su cui si effettua la ricerca restringendo il campo di ricerca.8
  9. 9. La Ricerca Dicotomica – L’AlgoritmoL’Algoritmo può essere descritto mediante i seguenti passi :1) Si individua l’elemento che sta a metà del vettore;2) Si confronta la chiave K con tale elemento. Se l’elemento individuato non è uguale a quello cercato si prosegue in due modi possibili : • se K > elemento mediano la ricerca continua solo nel semivettore superiore • se K < elemento mediano la ricerca continua solo nel semivettore inferiore3) Il procedimento continua iterativamente in modo da suddividere i semivettori via via individuati.9
  10. 10. Esempio numerico : Valore cercato 26 2 3 6 12 16 21 24 26 28 30 36 41 50 inf med sup 2 3 6 12 16 21 24 26 28 30 36 41 50 inf med sup 2 3 6 12 16 21 24 26 28 30 36 41 50 inf sup med10
  11. 11. • La ricerca termina con successo quando l’elemento mediano 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 diverso dalla chiave.Osservazione : Per il calcolo del valore mediano abbiamo bisogno di tre indici che individuino l’estremità inferiore, l’estremità superiore e la metà del vettore considerato ad ogni passo.11
  12. 12. med = [ (inf+sup)/2 ] K ≠ V [med] and no inf < sup si no si K > V [med] sup = med - 1 inf = med + 112
  13. 13. Ricerca dicotomica codice 1/2#include <stdio.h>#define MAXDIM 20 // definisco la dimensione massima del vettoremain(){ // La dichiarazione delle variabiliint i,inf,sup,med,K,N;int V[MAXDIM];do{ printf("n Inserire la dimensione del vettore non superiore a %dn",MAXDIM); scanf("%d",&N); }while(N>MAXDIM);// inserimento del vettore ordinato for (i=0;i<N;i++) { printf("Inserire lelemento %d : ",i+1); scanf("%d",&V[i]); }13
  14. 14. Ricerca dicotomica codice 2/2// Inserimento del valore da cercare ( la chiave K )printf("Inserire lelemento da cercare : ");scanf("%d",&K);inf = 0; //inizializzazione degli indicisup = N-1;med = (inf + sup)/2;//lettura dellelemento mediano del vettore a ciascun passowhile ( K != V[med] && inf<sup ){ if ( K > V[med] ) //controllo sull’elemento mediano inf = med+1; else sup = med-1; med = (inf + sup)/2;}//risultato della ricercaif ( V[med]== K )printf("Elemento trovato in posizione %dn", med+1);else printf("Elemento non trovaton");}14
  15. 15. confronto La Ricerca Sequenziale• ricerca con successo:Nel caso migliore ho un solo confronto e in quello peggiore N 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 NLa Ricerca dicotomica o binaria• Ad ogni iterazione linsieme è dimezzato, il numero di confronti è pari a quantevolte un numero N può essere diviso per 2 fino a ridurlo a 0.Per esempio in un vettore di dimensione N = 2h-1l’algoritmo deve compiere h = log2(N+1) passi (e quindi confronti) per la ricercasenza successo, nel caso medio il numero è leggermente inferiore mentre nel casomigliore è 1.15
  16. 16. confrontoEsempio : Se dovessimo cercare un elemento in un insieme di 1.000.000 di elementi, nei casi più sfortunati con l’algoritmi di Ricerca Sequenziale dovremmo eseguire circa 1.000.000 confronti, mentre con la Ricerca Binaria ne dobbiamo effettuare al massimo solamente 21.16
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×