Correzione 1° Esonero Lezione n°13 Prof.ssa Rossella Petreschi Lezione del 19 /11/2012 del Corso di Algoritmi e Strutture Dati Riferimenti: Cormen, Leiserson, Rivest, Stein Introduzione agli algoritmi e strutture dati Demetrescu, Finocchi, Italiano Algoritmi e strutture dati
ESERCIZIO 1 Utilizzando il metodo del potenziale, dimostrare che il costo di n operazione di inserimento in una tabella dinamica è pari a 3n.
Fattore di carico fattore di carico (T)= num (T)/ size (T) num (T): numero di elementi caricati in T size (T): numero totale di posizioni di T Una tabella è piena quando (T) = 1 (Tabella vuota: size(T)= 0, (T) = 1) Espansione (se la tabella è piena, ovvero (T) = 1 ): Si duplica il numero di posizioni nella nuova tabella, conseguentemente (T) ≥ 1/2.
La funzione potenziale Definiamo: (T) = 2num(T) - size(T) se (T) ≥ 1/2 (T) = size(T)/2 - num(T) se (T) < 1/2 Vale: il costo ammortizzato totale di una sequenza di operazioni rispetto alla funzione potenziale è un limite superiore del costo effettivo delle operazioni in quanto (T) ≥ 0 sempre, dove (T) = 0 se la tabella è vuota (T) = 0 se (T) = 1/2 (T) = num(T) se (T) = 1 ((T) può supportare l’espansione) Subito dopo una espansione: (T) = 2size(T)/2 - size(T) = 0 Immediatamente prima di una espansione: (T) = 2num(T) - num(T)= num(T)
Inserimento in tabella ((Ti-1) ≥ 1/2 ) Se lo i-esimo inserimento non attiva una espansione: i = ci + (Ti) - (Ti-1) = 1+(2num(Ti) - size(Ti)) - (2num(Ti-1) - size(Ti-1)) = 1 + (2num(Ti) - size(Ti)) - (2(num(Ti)-1)) - size(Ti)) = 3 Se lo i-esimo inserimento attiva una espansione: i = ci + (Ti) - (Ti-1) = num(Ti) +(2num(Ti) - size(Ti)) - (2num(Ti-1) - size(Ti-1)) = num(Ti) + (2num(Ti) – 2(num(Ti) +1)) - (2(num(Ti)-1) - (num(Ti)-1)) = num(Ti) + 2 - (num(Ti) -1) = 3
Inserimento in tabella ((Ti-1) < ½) Se (Ti-1) < ½ e (Ti) < 1/2 i = ci + (Ti) - (Ti-1) = 1 + (size(Ti)/2 - num(Ti)) - (size(Ti-1)/2 - num(Ti-1)) = = 1 + (size(Ti)/2 - num(Ti)) - (size(Ti)/2 - (num(Ti)-1)) = 0 Se (Ti-1) < ½ e (Ti) = 1/2 i = ci + (Ti) - (Ti-1) = 1 + (2num(Ti) - size(Ti)) - (size(Ti-1)/2 - num(Ti-1)) = 1 + (2(num(Ti-1)+1) - size(Ti-1)) - (size(Ti-1)/2 - num(Ti-1)) = = 3num(Ti-1) - 3/2size(Ti-1)+3 = 3(Ti-1) size(Ti-1) - 3/2size(Ti-1) + 3 < < 3/2size(Ti-1) - 3/2size(Ti-1) + 3 = 3 In ogni caso il costo di n operazione di inserimento in una tabella dinamica è pari a 3n.
ESERCIZIO 2 Dato un B-Albero di dimensione 4 costituito dalla radice contenente le chiavi /19,22,25/ e dai quattro figli contenenti, rispettivamente, le chiavi /16,17,18/ /20,21/ /23,24/ /28,33/ mostrare tutti i passi evolutivi che subisce il B-Albero man mano che vengono inserite, nell’ordine, le chiavi 11,12,27,29.
Soluzione 1 Inserisco 11: B-Albero di dimensione 4 costituito dalla radice contenente la chiave /22/ e dai due figli, a e b, contenenti, rispettivamente, le chiavi /17,19/ /25/. I tre figli di a hanno le chiavi /11,16/ /18/ /20,21/ e i due figli di b hanno le chiavi /23,24//28,33/ Inserisco 12: La foglia /11,16/ diventa /11,12,16/ Inserisco 27: La foglia /28,33/ diventa /27,28,33/
Soluzione 1 Inserisco 29: B-Albero di dimensione 4 costituito dalla radice contenente la chiave /22/ e dai due figli, a e b, contenenti, rispettivamente, le chiavi /17,19/ /25,29/. I tre figli di a hanno le chiavi /11,12,16/ /18/ /20,21/. I figli di b sono ora tre e hanno chiavi /23,24//27,28//33/, rispettivamente.
Soluzione 2 Inserisco 11: B-Albero di dimensione 4 costituito dalla radice contenente la chiave /18,22,25/ e dai quattro figli contenenti, rispettivamente, le chiavi /11,16,17/ /19,20,21/ /23,24//28,33/ Inserisco 12: B-Albero di dimensione 4 costituito dalla radice contenente la chiave /22/ e dai due figli, a e b, contenenti, rispettivamente, le chiavi /16,18/ /25/. I tre figli di a hanno le chiavi /11,12/ /17/ /19,20,21/ e i due figli di b hanno le chiavi /23,24/ /28,33/
Soluzione 2 Inserisco 27: La foglia /28,33/ diventa /27,28,33/ B-Albero di dimensione 4 costituito dalla radice contenente la chiave /22/ e dai due figli, a e b, contenenti, rispettivamente, le chiavi /16,18/ /27/. I tre figli di a hanno le chiavi /11,12/ /17/ /19,20,21/. I due figli di b hanno chiavi /23,24,25//28,29,33/, rispettivamente.
ESERCIZIO 3 Dimostrare che, operando con algoritmi di tipo Quick-Union Bilanciati, esiste una sequenza di (n-1) operazioni di Union che genera un albero di altezza W(logn).
Alberi Quickunion bilanciati unionA,B: rende la radice dell’albero più basso figlia della radice dell’albero più alto.La radice dell’albero risultante conterrà sia il nome del nuovo albero (p.e. A) che la sua altezza (rank(A)). Durante una sequenza di operazioni makeset, union e find, l’altezza di un albero QuickUnion bilanciato è limitata superiormente da log2 n dove n è il numero totale di makeset. O(n+mlogn) è il tempo totale necessario per eseguire su un albero quickunion bilanciato una sequenza di: m operazioni find, n operazioni makeset, al più (n-1)operazioni union. 13
Esiste una sequenza di (n-1) operazioni di Union che genera un albero di altezza W(logn) n makeset generano n alberi ciascuno di size 1 e rank 0 La sequenza di (n-1) operazioni di union la ottengo nella seguente maniera: n/2 union fra coppie distinte di alberi di size 20 e rank 0: ottengo n/2 alberi ciascuno di size 21 e rank 1. n/4 union fra coppie distinte di alberi di size 21 e rank 1: ottengo n/4 alberi ciascuno di size 22 e rank 2. n/8 union fra coppie distinte di alberi di size 22 e rank 2: ottengo n/8 alberi ciascuno di size 23 e rank 3. ………………….. ………………… n/logn union fra coppie distinte di alberi di size 2logn-1 e rank (logn-1): ottengo 1 albero di size n e rank W(logn) .
Perché (n-1) operazioni di Union S (n/2i ), i=1,…,logn = (S (n/2i ), i=1,…,logn) +n-n = = n (((S (1/2i ), i=0,…,logn)-1) = = n ((((1/2 ) logn +1-1)/1/2-1) -1) = = n(2- (1/2 ) logn -1)= = n(1-1/n)= n-1