Alberi e parentesi Lezione n°9 Prof.ssa Rossella Petreschi Lezione del 8 /11/2011 del Corso di Algoritmi e Strutture Dati Riferimenti: Paragrafo 4.3,4.4 del testo Crescenzi, Gambosi, Grossi “Strutture di dati e algoritmi” Edizioni: Addison Wesley ASD 2011/2012
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 2011/2012 2
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 2011/2012 3
2m è ancora troppo Dato un array di 256 bits 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 i 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20…… 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 2011/2012 4
..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 2011/2012 5
Alberi k-ari e ordinali 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 in T non radice; in T, sia a il primo figlio a sx di x (se esiste) e b il fratello più vicino a dx (se esiste). In B, a e b saranno, rispettivamente, fs e fd di x. ASD 2011/2012 6
Parentesi bilanciate . a b dd b e gg e hh a cc ff . Un albero ordinale può essere codificato da una sequenza di parentesi bilanciate nella seguente maniera: ogni nodo è codificato da una coppia di parentesi bilanciate e i suoi figli sono ricorsivamente codificati ciascuno con una sequenza bilanciata di parentesi. . a b dd b e gg e hh a cc ff . ( ( ( ( ) ) ( ( ) ) ( ) ) ( ) ( )) a c f b e h d g ASD 2011/2012 7
Corrispondenza biunivoca Esiste una corrispondenza biunivoca tra Alberi binari (2-ari) di n nodi; Alberi ordinali di n+1 nodi ; Sequenze bilanciate di 2n parentesi E la cardinalità di questi tre insiemi è il numero di catalano di dimensione n : Cn = (2n su n)/(n+1) c . a b dd b e gg e hh a cc ff . ( ( ( ( ) ) ( ( ) ) ( ) ) ( ) ( ) ) NOTA: non si possono rappresentare direttamente alberi binari mediante parentesi perché non c’è modo di distinguere fs da fd a a c f b b e h d e f d g g h ASD 2011/2012 8
La funzione Match Rank (parentesi,l) = i Select (parentesi,i) = l . a b dd b e gg e hh a ee ff . ( ( ( ( ) ) ( () ) () ) () () ) .abdeghcf 1 1 1 10 0 1 10 0 10 0 10 10 0 nodi parentesi Ovvero le parentesi aperte (chiuse) sono identificate con 1 (0) Ogni nodo di indice i è posto in corrispondenza con l’indice della propria parentesi sinistra (left) tramite le funzioni rank e select: Rank (parentesi,l) = i Select (parentesi,i) = l Per individuare anche la parentesi destra (right), dobbiamo introdurre una nuova funzione Match Match (parentesi,l) = r Match (parentesi,r) = l ASD 2011/2012 9
Rappresentazione succinta tramite parentesi bilanciate tramite parentesi bilanciate si può, in tempo costante, con 2n +o(n) bit in totale, fornire informazioni basiche sull’albero tipo: calcolo della dimensione di un sottoalbero Select (parentesi, i) = l Match (parentesi, l) = r size (i) = Rank(parentesi, r) - Rank(parentesi,l) + 1 Rappresentazione succinta fondamentale per rappresentare in forma compatta alberi statici ASD 2011/2012 10
Applicazioni XML: linguaggio di marcatura che definisce particolari costrutti, i marcatori, usati per associare informazione ad una porzione di testo. XML è un meta linguaggio ovvero un insieme di regole con cui è possibile costruire i propri marcatori e stabilire come vadano usati ed ha il solo scopo di strutturare l’informazione aggiungendo metadati e di costituire il formato in cui il messaggio verrà trasmesso. La codifica XML non ha nulla a che vedere con le applicazioni che si occupano di inviare, ricevere e mostrare il messaggio stesso. Un documento XML è validato rispetto alla posizione e alla sintassi usata per i vari marcatori e non rispetto al tipo di marcatori usati. Quindi i marcatori sono informazioni testuali al pari delle altre da cui si distinguono solo per ragioni sintattiche, ne consegue che qualsiasi software capace di lavorare con file di testo è in grado di lavorare con XML Si sottolinea la differenza con un linguaggio di marcatura tipo HTML dove la marcatura ha lo scopo di far capire come un testo debba essere visualizzato da un browser ASD 2011/2012 11
XML Le regole fondamentali di composizione di un documento XML asseriscono che: Ogni documento XML deve essere preceduto da una dichiarazione Questa istruzione ha una sintassi diversa dagli altri marcatori ed ha lo scopo di dichiarare alle applicazioni che accederanno al documento che si tratta di un documento XML Ogni documento XML deve avere un marcatore che racchiude tutti gli altri Questo marcatore si chiama radice del documento I marcatori XML non possono essere sovrapposti <a> testo <b> testo </b> testo </a> CORRETTO <a> testo <b> testo </a> testo </b> INCORRETTO I marcatori vengono anche chiamati nodi Ne consegue che ogni documento XML può essere rappresentato come un albero dove: la radice dell’albero è il marcatore radice; i nodi dell’albero sono i vari marcatori nell’ordine in cui sono inseriti l’uno nell’altro; nelle foglie ci sono i contenuti testuali (non possono esserci i marcatori) ASD 2011/2012 12
Esempio <?xml version=“1.0” encoding = “UTF-8”?> DICHIARAZIONE <cinematografia> RADICE DEL DOCUMENTO <film codice = “0052216”> <titolo> I soliti ignoti </titolo> <regista> Mario Monicelli </regista> <anno> 1958 </anno> <cast> <ruolo> <attore> Vittorio Gassman </attore> <personaggio> Peppe il pantera </personaggio> </ruolo> <attore> Carla Gravina </attore> <personaggio> Nicoletta </personaggio> </cast> </film> <film codice = “0060125”> <titolo> L’armata Brancaleone </titolo> <anno> 1966 </anno> </cinematografia> ASD 2011/2012 13