La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Programmazione Avanzata Java e C 12/01/2015 0.12 Lezione 28: Algoritmi di ordinamento.

Presentazioni simili


Presentazione sul tema: "Programmazione Avanzata Java e C 12/01/2015 0.12 Lezione 28: Algoritmi di ordinamento."— Transcript della presentazione:

1 Programmazione Avanzata Java e C 12/01/ Lezione 28: Algoritmi di ordinamento

2 12/01/ Lezione 142 Algoritmi di ordinamento  Selection sort Selection sort  Bubble sort Bubble sort  Insertion sort Insertion sort  Quick sort Quick sort Siti su internet:

3 12/01/ Lezione 143 Altre considerazioni sugli algoritmi  Per qualunque problema computabile esistono infiniti algoritmi risolutivi  Complessità computazionale degli algoritmi  Il costo può essere valutato in relazione a diversi parametri, ad es. l Tempo di calcolo occorrente (complessità temporale) l Occupazione di memoria (complessità spaziale)  Ottimizzare rispetto a un parametro in genere significa spendere rispetto ad un altro  La rapidità di calcolo è sempre un fattore importantissimo nella determinazione della bontà di un algoritmo

4 12/01/ Lezione 144 Tempo di calcolo  Ogni algoritmo è caratterizzato da un suo tempo di calcolo che determina il tempo necessario affinché tale algoritmo venga completamente eseguito.  Le prestazioni di un algoritmo sono in qualche modo proporzionali alla quantità di dati da elaborare e quindi alla quantità di istruzioni da eseguire  Il numero di istruzioni da eseguire non fornisce sempre un’indicazione utile, è un buon metodo di valutazione ma approssimativo e non assoluto.

5 12/01/ Lezione 145 esempio  Tempo di calcolo proporzionale a: l 1 per azzerare il primo elemento di un vettore di N elementi l N per sommare 1 a tutti gli elementi di un vettore di N elementi l N 2 per eseguire due cicli for intrecciati for(i=0; i

6 12/01/ Lezione 146 Ad esempio:  Insertion sort usa la minima quantità di memoria indispensabile, ma è lento  Quicksort è veloce, ma usa molta più memoria. Perché? Perché, essendo ricorsivo, occorre creare molte istanze della funzione. Se le cose non sono fatte bene può addirittura “ esplodere ” e richiedere una profondità di ricorsione pari al numero di elementi del vettore.

7 12/01/ Lezione 147 Considerazioni sugli algoritmi di ordinamento  Bubble sort l effettua all’incirca N 2 /2 confronti ed N 2 /2 scambi, sia in media che nel caso peggiore  Selection sort l effettua all’incirca N 2 /2 confronti ed N scambi l per ogni i da 1 a N -1 c’è uno scambio ed N-i confronti per un totale di N-1 scambi e (N-1)+(N-2) +…+2+1=N(N-1)/2 indipendentemente dai dati in ingresso. L’aggiornamento della variabile min dipende dai dati in ingresso nel caso peggiore il numero è quadratico, mediamente NlogN

8 12/01/ Lezione 148  Insertion sort l effettua in media N 2 /4 confronti ed N 2 /4 spostamenti (mezzi scambi), il doppio nel caso peggiore. La complessità diventa lineare nel caso di vettore quasi ordinato. Se il vettore è già ordinato non vengono effettuati scambi e il numero di confronti è pari agli elementi del vettore stesso  Quick sort l effettua in media 2NlogN confronti ed NlogN scambi, esegue N 2 /2 confronti nel caso peggiore, con sempre circa NlogN scambi l (se si esegue l’algoritmo su un vettore di N elementi già ordinato, l’algoritmo richiamerà se stesso N volte con vettori di dimensioni decrescenti di un’unità) Considerazioni sugli algoritmi di ordinamento

9 12/01/ Lezione 149 Tempi di esecuzione: esempio Tempi di ordinamento di un vettore contenente tutte le parole del file DIVINA_COMMEDIA.TXT:  Bubble sort 7,62 s  Bubble sort ottimizzato 7,51 s  Selection sort2,99 s  Insertion sort1.94 s  Quick sort0.01 s


Scaricare ppt "Programmazione Avanzata Java e C 12/01/2015 0.12 Lezione 28: Algoritmi di ordinamento."

Presentazioni simili


Annunci Google