Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoIsidoro Sorrentino Modificato 5 anni fa
1
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
Rappresentazione di alberi binari Lezione n°6 Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi ASD a.a.2010/2011- Lezione n°6
2
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 a.a.2010/2011- Lezione n°6 2
3
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!xn! = (2n/2n) x [(2n)!)/(nxnx(n-1)x(n-1)x…x1)] = = (1/2n)x[(2nx2n)/(nxn)]x[(2n-1)x(2n-2)/(n-1)x(n-1)]… [3x2] > > (1/2n)x[(2nx2n)/(nxn)]x[(2n-2)x(2n-2)/(n-1)x(n-1)]… [2x2] = = (1/2n) x [22n2/n2] x[22(n-1)2 /(n-1)2]… [22/12] = = (1/2n) x (22n) ASD a.a.2010/2011- Lezione n°6 3
4
Rappresentazione di un albero binario
Rappresentazione implicita: mantiene le relazioni fra i nodi di un albero binario tramite una semplice regola matematica senza uso di memoria aggiuntiva (a parte quella necessaria ai dati). Esempio: rappresentazione dell’heap Utilizzabile solo per alcune classi di alberi binari Oltre all’array dei nodi 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 all’array dei nodi usa strutture dati che richiedono 2n+o(n)bit aggiuntivi ASD a.a.2010/2011- Lezione n°6 4
5
Rappresentazione succinta per ampiezza
b a b c d e f 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 ASD a.a.2010/2011- Lezione n°6 5
6
Come navigare: Rank,Select
a b c d e f nodo[0,…,n-1] b[0,…,m-1] = pieno[0,…,2n]; a b c d Rank(b,i): numero di 1 presenti nel segmento b[0,i], per 0 ≤ i ≤ m-1; Select(b,i): posizione dell’(i+1)-esimo 1 in b, per 0 ≤ i ≤ Rank(b, m-1) e f Identificazione in nodo[] del fs(nodo[i]): f = 2i+1:posizione del fs di i in pieno[]; Rank(pieno,f): numero di 1 presenti nel segmento b[0,f]; nodo[Rank(pieno,f) -1]:fs[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 a.a.2010/2011- Lezione n°6 6
7
Implementazione di Rank
spazio mlogm bit; tempo O(1) (es. 256bit ovvero 32interi di 8 bit ciascuno) b(i) ……0 i ……32 Rank ……… 6 _____________________________________________________ spazio 2m=(2m/logm)/logm bit tempo O(1) per i campionati e per gli altri??? Rank’ m/k = 2m/logm j b(i) …… k=1/2 logm bit i …… Rank … per gli altri….. Rank(b,6) = Rank’[1] + #1nei primi 3 elementi di b[4,7] = 3 +1 =4 ASD a.a.2010/2011- Lezione n°6 7
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.