Rappresentazione di alberi binari

Slides:



Advertisements
Presentazioni simili
Algoritmi Paralleli e Distribuiti a.a. 2008/09 Lezione del 19/05/2009 Prof. ssa ROSSELLA PETRESCHI a cura del Dott. SAVERIO CAMINITI.
Advertisements

Algoritmi di ordinamento
Ordinamento in tempo lineare Il limite inferiore Ω(n log n) vale per tutti gli algoritmi di ordinamento generali, ossia per algoritmi che non fanno alcuna.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 4 Ordinamento:
Prof.ssa Rossella Petreschi Lezione del 29/10/2012 del Corso di Algoritmi e Strutture Dati Riferimenti: Capitolo 19 del testo Cormen, Leiserson, Rivest,
Prof.ssa Rossella Petreschi Lezione del 5/12/2012 del Corso di Algoritmi e Strutture Dati Riferimenti: Capitolo 11 del testo Anany Levitin “The design.
Prof.ssa Rossella Petreschi Lezione del 29 /10/2014 del Corso di Algoritmica Lezione n°8.
La codifica di Huffman Un'implementazione in C++ (parte del materiale è opera di Mark Nelson, Dr. Dobb’s Journal, Gennaio 1996)‏
Algoritmi Avanzati a.a.2013/2014 Prof.ssa Rossella Petreschi Somme prefisse Lezione n°2.
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
Alberi autoaggiustanti
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi
Lezione n°10 Prof.ssa Rossella Petreschi
Progettare algoritmi veloci usando strutture dati efficienti
Inserzione e Cancellazione
Branch and Bound Lezione n°19 Prof.ssa Rossella Petreschi
Branch and Bound Lezione n°14 Prof.ssa Rossella Petreschi
Progettare algoritmi veloci usando strutture dati efficienti
Alberi di ricerca di altezza logaritmica
Analisi di sequenze di operazioni Union-Find
Lezione n°9 Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi
Lezione n°7 Prof.ssa Rossella Petreschi
Alberi binari Definizione Sottoalberi Padre, figli
Rappresentazione di alberi
Correzione 1° Esonero Lezione n°13
B-alberi e alberi autoaggiustanti
Algoritmi Avanzati a.a.2011/2012 Prof.ssa Rossella Petreschi
Complessità ammortizzata degli algoritmi Union Find
La gestione degli insiemi disgiunti
Algoritmi Avanzati Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2011/2012 Prof.ssa Rossella Petreschi
Algoritmi Avanzati Prof.ssa Rossella Petreschi
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
Algoritmi Avanzati Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
Lezione n°4 Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2010/2011 Prof.ssa Rossella Petreschi
Algoritmi e Strutture Dati
Rappresentazione di alberi
Lezione n°6 Prof.ssa Rossella Petreschi
Branch and Bound Lezione n°18 Prof.ssa Rossella Petreschi
Analisi ammortizzata Lezione n°3
Gestione dinamica di tabelle
Alberi n-ary Lezioni di C.
Backtracking Lezione n°13 Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2011/2012 Prof.ssa Rossella Petreschi
Progettare algoritmi veloci usando strutture dati efficienti
Automi e stringhe Lezione n°24 Prof.ssa Rossella Petreschi
Estensione di strutture dati e
Algoritmi e Strutture Dati
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
LINGUAGGIO C Alberi e livelli
Alberi e parentesi Lezione n°9
Esercizio Dato un albero binario, definiamo altezza minimale di un nodo v la minima distanza di v da una delle foglie del suo sottoalbero, definiamo invece.
Algoritmi Avanzati a.a.2010/2011 Prof.ssa Rossella Petreschi
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
Grafi e problem solving
Lezione n°7 Splay-Trees e Heaps Prof.ssa Rossella Petreschi
concetti ed applicazioni
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
Il problema del flusso nelle reti
Algoritmi e Strutture Dati
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
Unione per ranghi compressi
Tabelle dinamiche Lezione n°3
Analisi ammortizzata Lezione n°2
HeapSort Stesso approccio incrementale del selectionSort Tipo di dato
Transcript della presentazione:

Rappresentazione di alberi binari Lezione n°8 Prof.ssa Rossella Petreschi Lezione del 8 /11/2011 del Corso di Algoritmi e Strutture Dati Riferimenti: Paragrafo 4.3 del testo Crescenzi, Gambosi, Grossi “Strutture di dati e algoritmi” Edizioni: Addison Wesley ASD 2011/2012

Numeri di Catalano Il numero di alberi binari distinti con n nodi è pari al numero di Catalano di dimensione n: Cn = (2n su n)/(n+1), risultato dell’equazione ricorsiva Cn = ∑ Cs Cn-s-1, con 0 ≤ s ≤ n-1 e C0= C1=1 C2= 2 C3= 5 C4= 14 C5= 42 …………. ASD 2011/2012 2

Quanti bit per un albero binario? Per rappresentare un qualunque albero binario con n nodi occorrono un numero di bit pari a log Cn= log[(2n su n)/ (n+1)] > > log[(22n)/ (2n(n+1))] per la (*) = 2n - O(logn) (*) (2n su n) = (2n)!/n! (2n-n)! = = (2n/2n) [2n (2n-1) (2n-2)…….1]/[n(n-1)(n-2)…1] [n(n-1)(n-2)…1]) = = (1/2n)[(2n2n)/(nn)][(2n-1)(2n-2)/(n-1)(n-1)]… [3x2/1] > > (1/2n)[(22n2/n2)][(2n-2)(2n-2)/(n-1)(n-1)]… [2x2/1] = = (1/2n) [22n2/n2] [22(n-1)2 /(n-1)2]… [22/12] = (1/2n) x (22n) ASD 2011/2012 3

Rappresentazione di un albero binario Per ogni nodo u, ci soffermiamo su u-padre, u-fs e u-fd Rappresentazione implicita: mantiene u-padre, ufs e ufd (ovvero le relazioni fra i nodi) tramite una semplice regola matematica senza uso di memoria aggiuntiva (a parte quella necessaria ai dati nei nodi, u-info). Esempio: rappresentazione dell’heap Utilizzabile solo per alcune classi di alberi binari Oltre alla rappresentazione necessaria per u-info, usa un numero costante di celle aggiuntive Rappresentazione succinta:rappresentazione che impega una quantità di memoria pari al minimo necessario, a parte termini additivi di ordine inferiore Applicabile ad alberi binari qualunque Oltre alla rappresentazione necessaria per u-info, usa strutture dati che richiedono 2n+o(n)bit aggiuntivi differenziandosi fortemente dalla rappresentazione esplicita che richiede 3nlogn bits aggiuntivi ASD 2011/2012 4

Rappresentazione succinta per ampiezza b a b c d e f 1 1 1 0 1 0 0 1 1 0 0 0 0 nodo[0,…,n-1] pieno[0,…,2n] c d e f Se un nodo occupa la posizione i nell’array nodo, allora i bit corrispondenti ai suoi due figli occupano le posizioni 2i+1 e 2i+2 nell’array pieno Se un nodo occupa la posizione i nell’array nodo, allora pieno[2i+1]=1(pieno[ 2i+2]=1) iff il riferimento al fs (fd) non è null Oltre all’array nodo, dobbiamo conteggiare 2n+1 bits necessari per l’array pieno + lo spazio per navigare fra i due array ASD 2011/2012 5

Come navigare: Rank,Select a b c d e f 1 1 1 0 1 0 0 1 1 0 0 0 0 nodo[0,…,n-1] pieno[0,…,2n]; a b c d Rank(pieno,i): numero di 1 presenti nel segmento pieno[0,i] Select(pieno,i): posizione dell’(i+1)-esimo 1 in pieno e f Identificazione in nodo[] del fs(nodo[i]) o del fd(nodo[i]) : f = 2i+1 (o d = 2i+2 ):posizione del fs (o fd) di i in pieno[]; Rank(pieno,f (oppure d)): numero di 1 presenti nel segmento b[0,f]opure b[0,d]; nodo[Rank(pieno, f (oppure d)) -1]:fs[nodo(i)] oppure fd[nodo(i)]. Identificazione in nodo[] del p(nodo[i]): p = Select (pieno,i): bit 1 corrispondente a nodo[i] in pieno[]; nodo[(p-1)/2]: p[nodo(i)]. ASD 2011/2012 6

Rappresentazione esplicita di Rank Nella rappresentazione esplicita del rank si hanno m interi di logm bit ciascuno , da cui: Spazio: mlogm bit; Tempo: O(1) b(i) 1 1 1 0 1 0 0 1 1 0 0 0 0 0 0 0 ……… i 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ……… ---------------------------------------------------------------------------------------- Rank 1 2 3 3 4 4 4 5 6 6 6 6 6 6 6 6 ………. Per ridurre lo spazio, si partiziona il vettore b in segmenti di dimensione k=logm/2 . Per ogni segmento si calcola un solo valore di rango, quindi avremo m/k= m/(logm/2) interi di logm bits ciascuno, da cui: Spazio: mlogm bit; ASD 2011/2012 7

Implementazione di Rank j 1 2 3 4 5 b(i) 1 1 1 0 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0…… i 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20…… ---------------------------------------------------------------------------------------- Rank 1 2 3 3 4 4 4 5 6 6 6 6 6 6 6 6 6 6 6 6 6… Tempo O(1) per conoscere il Rank (=Rank’) degli elementi campionati e per gli altri??? per gli elementi non campionati….. Rank(b,6) = Rank’[1] + #1nei primi 3 elementi di b[4,7] = 3 +1 =4 ASD 2011/2012 8