Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoScevola Marchese Modificato 10 anni fa
1
Programmazione Avanzata Java e C 12/01/2015 0.12 Lezione 28: Algoritmi di ordinamento
2
12/01/2015 0.12Lezione 142 Algoritmi di ordinamento Selection sort Selection sort Bubble sort Bubble sort Insertion sort Insertion sort Quick sort Quick sort Siti su internet: http://people.cs.ubc.ca/~harrison/Java/sorting-demo.html http://www.sorting-algorithms.com/ http://it.wikipedia.org/wiki/File:Sorting_quicksort_anim.gif
3
12/01/2015 0.12Lezione 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/2015 0.12Lezione 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/2015 0.12Lezione 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<N; i++) for(j=0; j<N; j++) … l Log 2 N ad ogni iterazione la dimensione del vettore da considerare si dimezza
6
12/01/2015 0.12Lezione 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/2015 0.12Lezione 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/2015 0.12Lezione 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/2015 0.12Lezione 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
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.