Indice
Esercizi Hash e sort
(sono quelli specificati a lezione e presenti sui lucidi)
Esercizio 1: Chi è più veloce ?
Scrivere una funzione
int* random_array(int n)
che restituisce un array contenente n
elementi casuali (va allocato sullo heap!! altrimenti viene deallocato!)
Utilizzare la funzione per scrivere due programmi C distinti che creano un array e lo ordinano con selection sort, oppure quicksort.
Osservare le differenze di performance tra i due algoritmi al crescere di n (e.g., n > 1000000) misurando il tempo necessario all'ordinamento
Esercizio 2: Ordinato è meglio ?
Dato un array di interi ordinato, come posso verificare se contiene un intero x? Devo davvero leggere ogni valore, o esiste un modo più veloce?
Esercizio 3: Hash o non Hash ?
Scrivere un programma che legga da tastiera una sequenza di n
interi NON distinti e li inserisca (senza duplicati) in una tabella hash di dimensione $m=2n$ utilizzando liste di trabocco per risolvere conflitti.
Utilizzare la funzione hash $h(x) = ((ax + b) \% p)\%m$ dove $p$ è il numero primo $999149$ e $a$ e $b$ sono interi positivi minori di 10.000 scelti casualmente.
Una volta inseriti tutti gli interi, stampare
- gli elementi nella tabella
- il numero totale di conflitti,
- la lunghezza massima delle liste e
- il numero di elementi distinti nella tabella.
Provare lo stesso con funzione hash $h(x) = x\%m$ e osservare se c’è differenza nella performance.