Laboratorio di ASD: Progetto n. 1 a.a. 2005/2006 Date di consegna La consegna va fatta a mano e via e-mail scrivendo ad entrambi i seguenti indirizzi: [email protected] e [email protected], entro e non oltre il 31 Marzo 2006. Non si accetteranno consegne via e-mail in formati diversi da PDF e Postscript. Punto 1 Si vuole confrontare il comportamento nel caso medio dei seguenti algoritmi di ordinamento, in funzione della dimensione del vettore: • BubbleSort • MergeSort • QuickSort A tal fine, si stimi, per ognuno degli algoritmi elencati, il tempo medio di esecuzione su vettori di lunghezze n pari a 10, 20, 50, 100, 200, 500, 1000, 5000 (ed eventualmente altre) e con intervallo di confidenza del 95%. Punto 2 Si consideri il problema di ottimizzare gli algoritmi BubbleSort e QuickSort. 1. Si proponga una variante ottimizzata di BubbleSort, basata sulle seguenti osservazioni: • se, in una data iterazione, non avviene alcuno scambio, allora l’array è necessariamente ordinato e l’algoritmo può essere terminato anticipatamente; • se in una iterazione non si sposta nessun elemento di posizione maggiore di i, allora nessuna iterazione successiva eseguirà alcuno scambio in posizioni maggiori di i. 2. Si proponga una variante ottimizzata di QuickSort, sfruttando le seguenti strategie di ottimizzazione: • eliminare il più possibile le chiamate a funzioni esterne; • eliminare la seconda chiamata ricorsiva a QuickSort; • facoltativamente, si proponga una versione non ricorsiva di QuickSort. 3. Si sfruttino i dati sperimentali ottenuti al punto 1 per definire una variante di QuickSort efficiente, che richiama opportunamente BubbleSort al suo interno. Si valutino, dal punto di vista sperimentale e teorico, le varianti proposte, confrontandole tra loro e con gli algoritmi originali. Per la valutazione sperimentale si utilizzi lo stesso quadro sperimentale (intervallo di confidenza, dimensione dei dati, ecc..) del punto precedente. Facoltativamente, si propongano ulteriori ottimizzazioni. 1 Punto 3 Questo punto è facoltativo. Si implementi l’algoritmo Insertion-Sort e se ne studi il comportamento come al Punto 1. In particolare, si confronti il suo tempo di esecuzione con quello di Bubble-Sort, e si proponga poi una variante di QuickSort che richiami InsertionSort al suo interno. Infine si confronti questa variante con quella realizzata al Punto 2. Relazione Si deve consegnare una relazione analitica di 15-20 pagine (esclusi i listati) che comprenda: 1. descrizione del problema e degli obiettivi dell’esperimento; 2. descrizione ed analisi degli algoritmi implementati; 3. discussione sulla metodologia dell’esperimento e sulle scelte implementative; 4. strumenti usati; 5. tabelle e grafici riepilogativi e comparativi dei risultati sperimentali; 6. discussione dei risultati ottenuti nei test effettuati e confronto con la teoria; 7. conclusioni; 8. listati completi. Note • I gruppi possono consistere al più di tre componenti; • per generare i numeri casuali si utilizzi il Random generator visto a lezione; • si commenti il codice opportunamente ed in italiano. 2