Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi Rappresentazione di alberi Lezione n°7 Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi ASD a.a.2010/2011- Lezione n°7
Implementazione di Rank spazio mlogm bit; tempo O(1) 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 _______________________________________________________ spazio 2m=(2m/logm)/logm bit tempo O(1) per i campionati e per gli altri??? Rank’ 3 5 6 6 6 m/k = 2m/logm 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…… k=1/2 logm bit 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°7 2
Numero degli 1 in un fissato intervallo di b C(h,2h): riporta il numero di 1 contenuti nelle prime h posizioni di tutti i possibili segmenti elementari C(h,2h)= k2k = ((logm) /2)2(logm)/2 = O( m1/2 logm) elementi di O(logk) bit ciascuno h=0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 h=1 0 0 0 0 1 1 1 1 1 1 1 1 2 2 2 2 h=2 0 0 1 1 1 1 2 2 1 1 2 2 2 2 3 3 h=3 0 1 1 2 1 2 2 3 1 2 2 3 2 3 3 4 Rank(b,6) = Rank’[1] + #1nei primi 3 elementi di b[4,7] = Rank’[1] + C[2,9] = 3 +1 =4 Dove Rank’[1] è il valore del Rank campionato più vicino a sinistra all’indice di cui si vuole calcolare il Rank; 9 è il numero decimale corrispondente al numero binario scritto in b nello intervallo [4,7] e la riga 2 indica che si debbono contare gli 1 nei primi 3 elementi in [4,7]. In generale Rank(b,i) = Rank’ [q] + C[r,s] dove q = ⎣i/k⎦ ed r = i-qk sono calcolabili in tempo O(1) e s??? ASD a.a.2010/2011- Lezione n°7 3
Calcolo di s in O(1) Rank’ 3 5 6 6 6 m/k = 2m/logm j 1 2 3 4 5 b’(j) 14 9 8 0 0 0≤ b’(j) < m1/2 b(i) 1 1 1 0 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0…… k=1/2 logm bit 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… Da cui Rank(b,i) = Rank’ [q] + C[r,b’[q+1]] Rank(b,6) = Rank’[1] + C[r,b’[q+1]] = Rank’[1] + C[2,b’[2]] = 3 +1 =4 ASD a.a.2010/2011- Lezione n°7 4
2m è ancora troppo i 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20…… 32 interi di 8 bit ciascuno: b(i) 1 1 1 0 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0… mlogm Rank 1 2 3 3 4 4 4 5 6 6 6 6 6 6 6 6 6 6 6 6 6 8 interi di 8 bit ciascuno: b(i) 1 1 1 0 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0… 2m (k=logm/2) Rank’ 3 5 6 6 6 i 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20…… 4 interi di 8 bit ciascuno: b(i) 1 1 1 0 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0… O(m/logm) (k=(log2m)/8) Rank” 5 6 ASD a.a.2010/2011- Lezione n°7 5
..di conseguenza L’operazione di Rank(b,i) si esegue in tempo costante con l’aggiunta di o(m) bit ai bit richiesti dal vettore b Infatti: Lo spazio occupato da Rank” è O(m/logm)bit Lo spazio occupato da Rank’ è O(mloglogm/logm)bit Si partiziona b in blocchi da k = (log2m)/8 bit e per ciascuno di questi blocchi si costruisce l’array Rank’ relativo (così è garantito che ogni elemento di Rank’ richiede O(loglogm) bit dato che le somme parziali all’interno di ogni singolo blocco Rank’ possono aver valore al più k) Lo spazio occupato da C è O( m1/2 logm) O(log(logm/2)) bit Quindi aggiungiamo o(m) ai bit richiesti da b’ aggiungiamo Rank”(8i/log2m) al calcolo del Rank(b,i) Esempio: Rank(b,12) = Rank”(1) + Rank’(3) + C[0,b’[4]] = Rank”(1) + Rank’(3) + C[0,0] = 5 + 1 + 0 = 6 ASD a.a.2010/2011- Lezione n°7 6
Corrispondenza biunivoca Esiste una corrispondenza biunivoca tra a Alberi binari di n nodi; b d Alberi ordinali di n+1 nodi ; Sequenze bilanciate di 2n parentesi c E la cardinalità di questi tre insiemi è il numero di catalano di dimensione n a b c d alberi k-ari (o cardinali): ogni nodo ha k riferimenti ai figli, numerati da 0 a k (binari se da 0 a 2) alberi ordinali: ogni nodo memorizza solamente la lista dei figli, variabile da nodo a nodo. Esiste la memorizzazione binarizzata che associa ad ogni albero ordinale T un albero binario B costruito nel Seguente modo: r è la radice sia in T che in B. Sia x un qualunque nodo non radice in T ; sia a il primo figlio a sx di x in T (se esiste) e b il fratello più vicino a dx in T (se esiste). In B, a e b saranno, rispettivamente, fs e fd di x. Sequenza di parentesi bilanciate: ogni nodo è associato ad una coppia di parentesi bilanciate e i suoi figli sono ricorsivamente codificati ciascuno con una sequenza bilanciata di parentesi. ASD a.a.2010/2011- Lezione n°7 7