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
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
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
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
Rappresentazione succinta per ampiezza
a
abcdef 1110100110000
b
c
d
e
nodo[0,…,n-1]
pieno[0,…,2n]
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
Come navigare: Rank,Select
a
b
c
d
e
f
abcdef
1110100110000
nodo[0,…,n-1]
b[0,…,m-1] = pieno[0,…,2n];
• 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)
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
Implementazione di Rank
•
spazio mlogm bit;
tempo O(1) (es. 256bit ovvero 32interi di 8 bit ciascuno)
b(i) 1 1 1 0 10 0 1 10 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……32
---------------------------------------------------------------------------------------Rank 1 2 3 3 4 4 4 5 6 6 6 6 6 6 6 6 6 6 6 6 ……… 6
_____________________________________________________
• spazio 2m=(2m/logm)/logm bit
tempo O(1) per i campionati e per gli altri???
Rank’
3
5
6
6
6
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…
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
m/k = 2m/logm
k=1/2 logm bit