A.A. 00 0 Esame di Algoritmi e strutture dati luglio 00 Esercizio (6 punti) Risolvere con almeno due metodi diversi la seguente relazione di ricorrenza T = T n = T n n log n
A.A. 00 0 Esame di Algoritmi e strutture dati luglio 00 Esercizio (6 punti) Descrivere l'algoritmo del Quickselect randomizzato per la determinazione della statistica di ordine k di un insieme, illustrando le somiglianze con il quicksort, e indicare la sua complessità computazionale. Applicarlo all'array di interi A={0,,,, 0, 0,, 0,,,, 6, 6} per la determinazione del mediano illustrando le varie chiamate ricorsive. (Per semplicità, ad ogni chiamata ricorsiva selezionare come pivot il primo elemento della porzione di array che viene considerata, anziché selezionarlo casualmente). Sol: Il pivot inizialmente è in posizione 0: 0 6 0 0 0 0 0 6 6 e la chiamata della funzione di quick select sarà: qs(0,,6) dopo il partition l'array avrà l'aspetto seguente: 0 6 0 0 0 0 0 6 6 essendo la posizione del mediano (6) a destra della posizione del pivot (0) si ricorre sulla porzione destra dell'array: qs(,,6) 0 6 0 0 6 0 0 0 il pivot () dopo il partition è finito in posizione e si ricorrerà sulla porzione sinistra dell'array: qs(,,6) 0 6 0 0 0 6 0 0 il pivot (6) dopo il partition è finito in posizione 6 che è la posizione del mediano e l'algoritmo termina.
A.A. 00 0 Esame di Algoritmi e strutture dati luglio 00 Esercizio (6 punti) Si consideri l'inserimento delle chiavi 0, 6,,, 0, 0,, 0,,,, 6,, 00, in una tabella hash di lunghezza M = usando l'indirizzamento aperto con funzione hash primaria h (k) = k mod M. Si scrivano le funzioni di scansione della tabella e si illustri l'evoluzione della tabella in seguito all'inserimento di queste chiavi nel caso di: i. scansione lineare ii. hashing doppio con h (k)= + (k mod (M-)) Discutere i vantaggi e gli svantaggi dei metodi di scansione. Sol: Nella scansione lineare la sequenza di scansione è data da p(k,i) =(h (k) + i) mod M dove p(i) è la posizione in cui si cerca di inserire la chiave k all'i-esimo tentativo e M è la dimensione della tabella. k h(k) Sequenza di scansione N. tentativi 0 6 6 6 6 6,, 0 0 0 0 0 0,, 0 0 0,,,, 6,,0,,,,6,,,,0,, 0 00,,,,,6,,,,0,,,, Totale tentativi Il numero medio di accessi per inserimento è n= =, acc/ins e la tabella avrà il seguente aspetto: 0 6 0 6 0 0 0 6 0 6 00 nul nul
A.A. 00 0 Esame di Algoritmi e strutture dati luglio 00 Nel secondo caso la funzione di scansione è: p(k,i) =(h (k) + i h (k)) mod M e la successione delle scansioni può essere riassunta dalla tabella seguente: k h (k) h (k) Sequenza di scansione N. tentativi 0 6 6 6 6 0 6,6 0 0 0 0 0 0, 0 0 0,,6,, 6 00 6,,, Totale tentativi Il numero medio di accessi per inserimento è n= =,6 acc /ins e la tabella avrà il seguente aspetto: 0 6 0 6 0 0 0 6 6 nul 0 00 nul
A.A. 00 0 Esame di Algoritmi e strutture dati luglio 00 Esercizio (6 punti) Descrivere l'evoluzione di un B-tree di grado minimo t= quando, partendo dalla struttura vuota, la successione di inserimento delle chiavi è la seguente: 0, 0, 0,,, 6, 0,, 0, 0, 0,,, 6,,. Nella situazione in cui si trova la struttura, qual'è il minimo numero inserimenti necessari a provocare lo split della radice? Successivamente eseguire le cancellazioni di e 6. Evidenziare nelle varie fasi la struttura del B-tree. Riassumere i tempi di esecuzione delle varie operazioni sui B-tree.
A.A. 00 0 Esame di Algoritmi e strutture dati luglio 00 Esercizio (6 punti) Illustrare l'algoritmo di Kruskal (in pseudocodice) e la sua complessità computazionale in funzione della rappresentazione del grafo. Dato il grafo pesato rappresentato nella figura mostrare l'evoluzione dell'algoritmo di Kruskal evidenziando le strutture dati associate, la marcatura (colorazione) degli archi, l'albero ricoprente. 6 Sol: Il primo passo è l'ordinamento degli archi in ordine crescente di peso: arco peso (,) (,) (6,) (,) (,) (,) (,) (,) (,) (,6) (,) (6,) (,) (,) (,) Successivamente si procede all'unione dei vari alberi (inizialmente tutti alberi nodo) con la struttura union-find: union(find(),find())=union(,) union(find(),find())=union(,) 6 6
A.A. 00 0 Esame di Algoritmi e strutture dati luglio 00 union(find(6),find())=union(6,) union(find(),find())=union(,) union(find(),find())=union(,) l'arco viene colorato di rosso. union(find(),find())=union(,) union(find(),find())=union(,6) union(find(),find())=union(,) dove il nodo è risalito per la path compression durante la find(). 6 6 6 6 6 6 6 6 6 6 6 6
A.A. 00 0 Esame di Algoritmi e strutture dati luglio 00 union(find(),find())=union(,) 6 6 le successive union fanno colorare di rosso i relativi archi visto che l'insieme dei nodi è diventato unitario e si è formato l'albero. Al termine la colorazione del grafo sarà: 6 e il peso dell'albero è pari a.