La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

8b. Esempi di algoritmi con l’uso di array: ordinamento e ricerca

Presentazioni simili


Presentazione sul tema: "8b. Esempi di algoritmi con l’uso di array: ordinamento e ricerca"— Transcript della presentazione:

1 8b. Esempi di algoritmi con l’uso di array: ordinamento e ricerca
Informatica per l’Ingegneria

2 Informatica per l’Ingegneria
Indice Problemi ricorrenti in informatica: Ordinamento di un vettore: Ordinamento per selezione: il metodo di selezione diretta (selection sort) Ordinamento per scambio: il metodo dell’affioramento(bubble sort) Il metodo dell’ordinamento non decrescente(quick sort) Ordinamento per fusione (merge-sort) Ricerca in un vettore: Ricerca sequenziale Ricerca dicotomica Informatica per l’Ingegneria

3 Il problema dell’ordinamento
Il problema è quello di ordinare gli elementi di un insieme secondo una prefissata relazione d’ordine, che dipende dalla natura dei dati da ordinare I metodi di ordinamento si applicano ad insiemi di dati elementari (singoli numeri o lettere) dati rappresentati in forma complessa: in generale si fa riferimento ad un insieme di strutture, delle quali si seleziona un campo che viene usato come campo chiave per l’ordinamento; il risultato dell’ordinamento sarà una ridisposizione dei record secondo l’ordinamento introdotto nel campo considerato. Informatica per l’Ingegneria

4 Informatica per l’Ingegneria
Metodi di ordinamento Classificazione: Inserzione: Si considerano gli elementi uno alla volta e ciascun nuovo elemento viene collocato nella posizione che gli compete all’interno dell’insieme di elementi considerati in precedenza. Selezione: Si scandisce l’insieme in modo da individuare l’elemento più piccolo, che viene separato dal resto dell’insieme. Dell’insieme rimasto viene ancora trovato il più piccolo elemento e lo si colloca di seguito a quello trovato in precedenza. Questo procedimento si itera fino a quando non si sono considerati tutti gli elementi. Scambio: Si scandisce tutto l’insieme, se due elementi vengono trovati fuori posto si scambiano tra loro. Questo procedimento viene ripetuto fino a quando non si hanno più cambiamenti. Fusione: Si sfrutta un’operazione più semplice dell’ordinamento, chiamata fusione, che consiste nel formare un insieme ordinato a partire da due insiemi già ordinati Informatica per l’Ingegneria

5 Prestazioni degli algoritmi di ordinamento
Misurate tramite due fattori: Numero di confronti necessari per determinare gli elementi fuori posto Numero di spostamenti da effettuare per riportare gli elementi al loro posto Algoritmi con valore basso per i due fattori sopra esposti sono più efficienti: eseguono l’ordinamento in meno passaggi, cioè impiegando meno tempo e spazio Informatica per l’Ingegneria

6 Informatica per l’Ingegneria
Ipotesi di lavoro Nel seguito: come insieme di dati da ordinare considereremo un vettore di numeri interi V di dimensione N; V(i) indicherà l’i-esimo elemento del vettore. La relazione d’ordine che si prenderà in considerazione è l’usuale ordinamento numerico (basato sui concetti di minore e maggiore) Supporremo di realizzare un ordinamento crescente. Con l’istruzione V(i) V(k) abbrevieremo il seguente blocco di istruzioni di scambio: lavoro = V(i); V(i) = V(k); V(k)= lavoro; Informatica per l’Ingegneria

7 Ordinamento per selezione
Selection Sort : Il metodo di selezione diretta: Il metodo fa uso di due indici di posizione : i: è l’indice dell’elemento del vettore che delimita l’inizio dell’insieme dei valori presi in considerazione ad ogni singolo passo j: è un cursore che ad ogni passo percorre l’insieme dei valori da scandire k: è un indice che all’interno di ogni passo tiene traccia del minimo progressivo dell’insieme da scandire Informatica per l’Ingegneria

8 Ordinamento per selezione
Algoritmo di selezione diretta: Passo 0: All’inizio l’indice i viene posizionato sul primo elemento del vettore V; j invece comincia a scandire dal secondo elemento Passo 1: Il primo elemento viene confrontato con i rimanenti (scanditi da j), scambiando di posto il primo elemento e quello di valore minimo alla fine della scansione(posizione k) Passo 2: Al secondo passo l’indice i viene portato alla seconda posizione, perché il nuovo insieme dei valori da scandire non comprende il primo, che è sicuramente il minimo Passi successivi: L’indice j percorre l’insieme dei valori da scandire, a partire dall’elemento successivo a i; il processo riprende in maniera analoga al passo precedente e viene iterato finché l’indice i non giunge all’ultima posizione. Informatica per l’Ingegneria

9 Informatica per l’Ingegneria
Esempio 25 8 37 41 27 le colonne rappresentano i passi dell’algoritmo gli elementi evidenziati in azzurro rappresentano il sottoinsieme del vettore da scandire per l’ordinamento ad ogni passo il cerchio rosso rappresenta l’elemento minimo di ognuno dei sottoinsiemi Informatica per l’Ingegneria

10 Prestazioni dell’algoritmo
Il metodo di selezione diretta presenta un numero di confronti proporzionale ad N2: al primo passaggio si effettuano N-1 confronti, al secondo N-2 e così via, fino ad arrivare all’ultimo confronto; si ha pertanto: (N-1) + (N-2) + (N-3) + ….. +1 = N(N-1)/2 Per quanto riguarda il numero di spostamenti essi sono al più N-1. La prestazione del metodo per quanto riguarda il numero di confronti non è influenzata dalla configurazione iniziale dei dati(se sono ordinati o meno) Informatica per l’Ingegneria

11 Selezione diretta: flow-chart
inizio i =1 Le istruzioni di scambio si trovano nel ciclo scandito dalla i, per cui vengono eseguite N-1 volte AL PIU’ (solo se K!=i) I confronti vengono effettuati N-1 volte per ognuno degli N cicli scanditi dalla i, perché si trovano in un’istruzione di controllo all’interno dei due cicli falso i<N vero k = i j = i+1 falso j<=N vero V(k)>V(j) vero k = j falso j=j+1 fine vero k != i V(i) V(k) falso i=i+1 Informatica per l’Ingegneria

12 Informatica per l’Ingegneria
Codice Sorgente N=input('Inserire la dimensione del vettore'); for i=1:N V(i)=input('Inserire un numero'); end k=i; for j=i+1:N if V(k) >V(j) k=j; if k~=i lavoro = V(i); V(i) = V(k); V(k)= lavoro; disp(V); Informatica per l’Ingegneria

13 Ordinamento per scambio
Il procedimento tipico di qualsiasi algoritmo di scambio è il seguente: si considerano i primi due elementi dell’insieme; se il primo elemento della coppia è maggiore del secondo i due elementi vengono scambiati di posto tra di loro; si considera ora una nuova coppia formata dal secondo e dal terzo elemento dell’insieme, si confrontano e si scambiano le posizioni se necessario; questo procedimento si ripete, considerando coppie di elementi consecutivi, fino a quando non si è esaurito tutto l’insieme Informatica per l’Ingegneria

14 Ordinamento per scambio
Il metodo dell’affioramento (Bubble Sort) Gli elementi più “pesanti” tendono ad andare verso il basso e quelli più leggeri verso l’alto: ad ogni passo (step) dell’algoritmo l’elemento in assoluto più pesante sarà collocato nella posizione finale, che al passo successivo non verrà più scandita Il numero massimo di passi è N-1 , ma dato che ad ogni passo più elementi potrebbero essere “a posto”, i passi potrebbero anche di meno Informatica per l’Ingegneria

15 Informatica per l’Ingegneria
Esempio 25 8 37 27 41 le colonne rappresentano i passi dell’algoritmo gli elementi evidenziati in azzurro rappresentano il sottoinsieme del vettore da scandire per l’ordinamento ad ogni passo il cerchio rosso rappresenta l’elemento massimo di ognuno dei sottoinsiemi Informatica per l’Ingegneria

16 Bubble Sort: Flow-chart
inizio La variabile più importante usata nel procedimento è: scambi: viene inizializzata a 0 ad ogni passo e serve per controllare se ci sono stati scambi ad un certo passo: se non ce ne sono il resto di vettore è ordinato step = 1, scambi=1 falso step < N && scambi == 1 vero scambi = 0 fine j = 1 falso j <= N - step vero vero V(j)>V(j+1) V(j) V(j+1) scambi = 1 falso j = j + 1 step = step + 1 Informatica per l’Ingegneria

17 Informatica per l’Ingegneria
Codice Sorgente N=input('Inserire la dimensione del vettore'); for i=1:N V(i)=input('Inserire un numero'); end step=1; scambi=1; while step<N && scambi==1 scambi=0; for j=1:N-step if V(j)>V(j+1) lavoro = V(j); V(j) = V(j+1); V(j+1)= lavoro; step=step+1; disp(V); Informatica per l’Ingegneria

18 Informatica per l’Ingegneria
Prestazioni Numero di confronti: l’analisi del caso peggiore porta a concludere che il metodo è di ordine N2 ; il caso peggiore si ha quando l’insieme è ordinato in modo decrescente e da vita ad un numero complessivo di confronti pari a (N-1) + (N-2) + (N-3) + ….. +1 = N(N-1)/2 Si può dimostrare che questa valutazione è vera anche nella media dei casi Nel caso in cui in qualche passo vada a posto più di un elemento il numero di confronti complessivi da operare sarà inferiore Numero di spostamenti: Si segue un ragionamento analogo (nel caso peggiore sono N(N-1)/2). La prestazione del metodo è pertanto influenzata dalla configurazione iniziale dei dati Informatica per l’Ingegneria

19 Il problema della ricerca
Il problema è quello di cercare un elemento in un vettore I metodi di ricerca si applicano ad insiemi di dati elementari (singoli numeri o lettere) dati rappresentati in forma complessa: in generale si fa riferimento ad un insieme di record, dei quali si cercano uno o più campi che vengono usati come campi chiave per la ricerca. Informatica per l’Ingegneria

20 Informatica per l’Ingegneria
Metodi di ricerca Metodi basati sul confronto di chiavi: si confrontano gli elementi del vettore con l’elemento (chiave) che si vuole ricercare: Ricerca lineare: si confronta ripetutamente la chiave con ciascuno degli elementi del vettore finché eventualmente non si trova la chiave Ricerca dicotomica: Si confronta la chiave con l’elemento che si trova a metà del vettore (supposto ordinato). Se l’elemento individuato non è uguale a quello cercato si prosegue la ricerca nel semivettore inferiore o superiore a seconda che la chiave sia più piccola o più grande dell’elemento che si trova a metà. Informatica per l’Ingegneria

21 Informatica per l’Ingegneria
Ipotesi di lavoro Elementi utilizzati nell’analisi: Vettore V di dimensione N Chiave di ricerca K Indice i per scorrere il vettore t = indice che punta all’inizio del vettore in cui ricercare u= indice che punta alla fine del vettore in cui ricercare Informatica per l’Ingegneria

22 Informatica per l’Ingegneria
Ricerca lineare Principio risolutivo: 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). Informatica per l’Ingegneria

23 Ricerca lineare: flow-chart
start i = 1 K ≠ V (i) and i <= N no si i = i+1 no si i <=N Elemento Non trovato Elemento Trovato con indice i end Informatica per l’Ingegneria

24 Informatica per l’Ingegneria
Codice Sorgente N=input('Inserire la dimensione del vettore'); for i=1:N V(i)=input('Inserire un numero'); end K=input('Inserire elemento da cercare'); i=1; while i<=N&& K~=V(i) i=i+1; if i<=N fprintf('Elemento trovato con indice %d\n',i); else disp('Elemento non trovato'); Informatica per l’Ingegneria

25 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 è : ….. 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 Informatica per l’Ingegneria

26 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 Informatica per l’Ingegneria

27 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. Informatica per l’Ingegneria

28 Ricerca dicotomica: flow-chart
start t = 1 u = N i = ceil((t+u)/2) no t <= u && K ~=V (i) si no K > V (i) si u = i - 1 t = i + 1 i = ceil((t+u)/2) t>u no si Elemento trovato posizione i Elemento Non trovato end Informatica per l’Ingegneria

29 Ricerca dicotomica: codice
Versione iterativa //Ricerca dicotomica di una chiave K in un vettore V N=input('Inserire la dimensione del vettore'); for i=1:N V(i)=input('Inserire un numero'); end %Ordinamento k=i; for j=i+1:N if V(k) >V(j) k=j; if k~=i lavoro = V(i); V(i) = V(k); V(k)= lavoro; disp (V); %Ricerca K=input('Inserire elemento da cercare'); t=1; u=N; i=ceil((t+u)/2); while t<=u && K~=V(i) if K>V(i) t=i+1; else u=i-1; end if t>u disp('Elemento non trovato'); else fprintf('Elemento trovato in posizione%d\n',i); Informatica per l’Ingegneria

30 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. Informatica per l’Ingegneria


Scaricare ppt "8b. Esempi di algoritmi con l’uso di array: ordinamento e ricerca"

Presentazioni simili


Annunci Google