Lezione n°7 Splay-Trees e Heaps Prof.ssa Rossella Petreschi Lezione del 24/10/2012 del Corso di Algoritmi e Strutture Dati Riferimenti: Paragrafo 7.5 del testo Kingston “Algorithms and data structures” Edizioni: Addison-Wesley Capitolo 20 del testo Cormen, Leiserson, Rivest, Stein “Introduzione agli algoritmi” Edizioni: Jackson Libri
Analisi ammortizzata di un singolo passo di splay 2 ri(u) - ri-1(u) - ri(p(p(u)))-2 ≥ 0 Per = sizei-1(u) / sizei(u) > 0; = sizei(p(p(u))) / sizei(u) >0; si ha +≤ 1 e quindi, per il lemma, log + log ≤ -2 Allora: log (sizei-1(u) / sizei(u)) + log (sizei(p(p(u))) / sizei(u)) ≤ -2 ri-1(u) + ri(p(p(u))) - 2ri(u) ≤ -2 ovvero 2ri(u) - ri-1(u) - ri(p(p(u))) - 2 ≥ 0 Lemma Datiereali positivi con +≤ 1, vale log + log ≤ -2 Prova: log + log = log la funzione logaritmo è monotona crescente e raggiunge il massimo, nell’intervallo dell’ipotesi, quando è massimo ovvero quando ovvero log + log = -2 2
Complessità ammortizzata totale Il tempo ammortizzato di una singola operazione di splay è pari a (logm), con m numero dei nodi dell’albero in cui si effettua l’operazione, dato che: i ≤ 1 + 3 (ri(u) - ri-1(u)) = , per i= 1,…k 1 + 3 (rangofinale(u) - riniziale(u)) , rangofinale(u) ≤ log m Il tempo totale ammortizzato di una sequenza di operazioni (di ricerca, di inserimento e di cancellazione) su uno splay-tree è data da ( logn), con n massimo numero di nodi che l’albero raggiunge durante la serie di operazioni. 3
Applicazioni Gli splay tree sono stati pensati per l'implementazione di cache dove gli algoritmi di gestione dei dati sono legati a due concetti fondamentali: località del codice: non si accede alle informazioni in modo uniforme (accesso casuale), ma ci sono parti di informazione a cui si accede più frequentementente (accesso localizzato). eliminazione dalla cache dei dati usati meno recentemente. Ad ogni accesso l'algoritmo splay sposta il nodo su cui opera alla radice,conseguentemente gli elementi a cui si accede più frequentemente si trovano sempre vicino alla radice dell'albero, rendendoli più velocemente accessibili e migliorando sensibilmente i tempi di accesso globali alla cache nelle operazioni di ricerca e cancellazione. 4
Heap La struttura dati Heap (minimo) è un albero binario di n elementi, completo o quasi completo, tale che il valore associato ad ogni nodo sia maggiore o uguale a quello associato al padre. La radice contiene il valore minimo. (in modo analogo si parla di heap massimo). L’heap è efficientemente rappresentato con un vettore e ∀i , p(i) in posizione ëi/2û, fs(i) e fd(i) in posizione 2i e 2i+1 2 5 7 7 9 8 1 2 3 4 5 6
Heap di Fibonacci:definizione Un Heap di Fibonacci è un insieme non ordinato di alberi con la seguente struttura: le radici degli alberi dell’heap, così come i figli di ogni singolo nodo, sono fra loro collegate da una lista doppiamente puntata; ogni nodo v contiene un puntatore al padre; un puntatore ad uno dei figli; il numero dei figli; un valore inferiore a quello associato ai figli (per ogni albero il valor minimo è associato alla radice); esiste un puntatore alla radice contenente il valore minimo di tutto l’heap. Infine ad ogni nodo v è associato un booleano. Il booleano Vero indica che v è marcato, dato che ha perso un figlio durante una delle operazioni sull’heap.
Heap di Fibonacci:immagine