Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoTommasa Nicoletti Modificato 5 anni fa
1
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
2
Implementazione di Rank
spazio mlogm bit; tempo O(1) b(i) …………. i …… Rank _______________________________________________________ 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 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°7 2
3
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= h= h= h= 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
4
Calcolo di s in O(1) Rank’ m/k = 2m/logm j b’(j) ≤ b’(j) < m1/2 b(i) …… k=1/2 logm bit i …… Rank … 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
5
2m è ancora troppo i …… 32 interi di 8 bit ciascuno: b(i) … mlogm Rank 8 interi di 8 bit ciascuno: b(i) … 2m (k=logm/2) Rank’ i …… 4 interi di 8 bit ciascuno: b(i) … O(m/logm) (k=(log2m)/8) Rank” ASD a.a.2010/2011- Lezione n°7 5
6
..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] = = 6 ASD a.a.2010/2011- Lezione n°7 6
7
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
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.