Laboratorio di Informatica: Algoritmi e Strutture Dati
a.a. 2000/20001
Progetto n. 1
Data: 10.01.2001 (Rev. 14.01.2001)
Data consegna relazioni: 08.02.2001
L'algoritmo di ordinamento ShellSort e' costituito dalla seguente generalizzazione di InsertionSort (espressa in pseudocodice nello stile di Cormen et al.):
foreach h in {v
d,vd-1, ..., 1}do for j <- h+1 to length[A]
do k <- A[j]
i <- j-h
while i > 0 and A[i] > k
do A[i+h] <- A[i]
i <- i-h
A[i+h] <- k
Per ottenere un programma di ordinamento a partire da questo schema e' necessario fissare i valori assunti da
h (cioe' la sequenza {vd,vd-1, ..., 1}). Il fatto che tale sequenza contenga sempre 1 assicura che l'algoritmo si comportera' sempre almeno come InsertionSort nelle sue ultime passate. Il tempo di calcolo di ShellSort dipende ovviamente dalla sequenza scelta per {vd,vd-1, ..., 1}. Sono state studiate in letteratura varie possibilita', tra le quali:vd+1 =
Si vuole studiare il comportamento in media dei seguenti algoritmi di ordinamento, in funzione della dimensione del vettore:
InsertionSort
ShellSort, per le tre scelte (1), (2), e (3) sopra descritte
QuickSort
HeapSort
A tal fine si stimino con un intervallo di confidenza del 95% i valori medi dei seguenti due parametri:
Cn: numero di confronti utilizzati per ordinare n numeri
Sn: numero di scambi utilizzati per ordinare n numeri
per tutti gli algoritmi citati e per almeno i seguenti valori di n: 10,20,50,100,500,1000, 5000.
E' ammesso l'uso dei seguenti linguaggi di programmazione: Pascal, C, C++, Java.
Si deve consegnare una relazione analitica che comprenda:
1.obiettivi dell'esperimento;
2.metodologia dell'esperimento;
3.strumenti usati;
4.tabelle e grafici riepilogativi e comparativi;
5.conclusioni;
6.listati completi.
I gruppi possono consistere di al piu' tre componenti.