Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi Parentesi e codici Lezione n°10 Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi ASD a.a.2010/2011- Lezione 10
Parentesi bilanciate . a b dd b e gg e hh a cc ff . 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 . ( ( ( ( ) ) ( ( ) ) ( ) ) ( ) ( ) ) a a c f b b e h d e f d g g h ASD a.a.2010/2011- Lezione 10 2
Match(b,i) . a b dd b e gg e hh a ee ff . Match (parentesi,i) = intero j tale che i e j sono le posizioni di una coppia di parentesi corrispondenti Ovvero, se parentesi [l] = 1 e parentesi [r] = 0 che rappresenta nodo[i] si ha: Match (parentesi,r) = l Match (parentesi,l) = r Rank (parentesi,l) = i Select (parentesi,i) = l NOTARE che non si possono rappresentare direttamente alberi binari mediante parentesi perché non possiamo distinguere figli sinistri da figli destri . a b dd b e gg e hh a ee ff . ( ( ( ( ) ) ( () ) () ) () () ) .abdeghcf 1 11 10 0 1 10 0 100 1010 0 nodi parentesi ASD a.a.2010/2011- Lezione 10 3
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 a.a.2010/2011- Lezione 10 4
Applicazioni(1) 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 a.a.2010/2011- Lezione 10 5
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 a.a.2010/2011- Lezione 10 6
Esempio ASD a.a.2010/2011- Lezione 10 7 <?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 a.a.2010/2011- Lezione 10 7
Ancora una rappresentazione implicita Codice biettivo: definisce una biezione fra l’insieme degli alberi etichettati di n vertici e un insieme di stringhe sopra [0,n-1]. Cayley nel 1889 provò che il numero di alberi etichettati su n vertici è pari ad nn-2, pertanto una corrispondenza biettiva richiede che la cardinalità della stringa sia uguale ad n-2. ASD a.a.2010/2011- Lezione 10
Il primo codice biettivo Prüfer nel 1918 presentò una nuova prova del teorema di Cayley e all’interno di questa prova introdusse il primo codice biettivo che poneva in corrispondenza alberi e stringhe. Il codice di Prüfer opera ricorsivamente eliminando ad ogni passo dall’albero la foglia di etichetta minima. Quando una foglia viene eliminata l’etichetta del proprio padre è aggiunta alla stringa. ASD a.a.2010/2011- Lezione 10
CODICE DI PRÜFER Albero Codice 6 6 6 2 2 5 5 5 1 1 1 3 4 3 4 3 4 [2,…] [2,6,…] [2,6,1…] [2,6,1,1,5] ASD a.a.2010/2011- Lezione 10
L’ALGORITMO DI CODIFICA dg v list 1 2 3 345 06 4 5 16 6 25 0. Tutti i vertici sono non visitati (nv-nodi) 1. For each v nv-nodo from 1 to n do 2. if (degree[v]=1) then 3. V è visitato e u è l’unico nv-nodo in adj[v] 4. aggiungi u al codice C e decrementa il suo grado di 1 5. while (degree[u]=1 and u<v) do 6. u è visitato e z è l’unico nv-nodo in adj[u] 7. aggiungi z al codice C and e decrementa il suo grado di 1 8. u = z ASD a.a.2010/2011- Lezione 10
CODICE DI PRÜFER Codice Albero 2,6,1,1,5 2,6,1,1,5 2,6,1,1,5 2,6,1,1,5 … 0,2,1,0,0,1,1 0,2,0,0,0,1,1 0,2,0,0,0,1,0 0,1,0,0,0,1,0 … 0 1 2 3 4 5 6 0 1 2 3 4 5 6 0 1 2 3 4 5 6 0 1 2 3 4 5 6 6 6 2 6 2 2 2 1 1 3 4 3 ASD a.a.2010/2011- Lezione 10
L’ALGORITMO DI DECODIFICA 0. Marca tutti i v che non appaiono in C e push(n in C) 1. Per ogni v da 0 a n-1 do 2. if (v è marcato ) then 3. u = pop(C) e aggiungi lo spigolo (v, u) all’albero T 4. if (u non appare più in C) then marca u 5. while (u è marcato and u < v) do 6. z = pop(C) e aggiungi lo spigolo (u, z) all’albero T 7. if (z non appare più in C) then marca z 8. u = z ASD a.a.2010/2011- Lezione 10
Applicazioni(2) Topologia di una rete (modello OSI) sottorete: livelli 1-3 topologia fisica livello1 topologia logica livelli 2,3 computer host:livelli 4-7 L’approfondita conoscenza della topologia della rete è alla base di ogni applicazione gestionale della rete stessa. Con il termine tomografia della rete si intende la stima della struttura logica e il comportamento dei livelli di link nella rete ASD a.a.2010/2011- Lezione 10
Tomografia di una rete ad albero Problema: dedurre la tomografia di una rete a partire da tutti i cammini OD (da nodo origine a nodo destinazione) Modello: rete ad albero, ovvero ad ogni istante esiste un unico cammino fra ogni coppia OD Idea: porre in relazione gli unici cammini nella matrice OD(rxr) con le sequenze di Prufer e gli alberi etichettati. ASD a.a.2010/2011- Lezione 10 15
Algoritmo OD/Prufer Algoritmo: Input: matrice OD(rxr) Output: l’albero della rete, decodificato dalla sequenza di Prufer Procedura: le foglie dell’albero sono etichettate con i numeri da 1 ad r; tutti i nodi interni saranno numerati con valori crescenti a partire da (r+1), man mano che saranno individuati; (r+1) è il primo valore inserito nel codice di Prufer, ovvero l’etichetta assegnata al primo nodo interno connesso alla foglia con etichetta 1; ogni nuova etichetta m aggiunta al codice (ovvero ogni nuovo nodo interno viene identificato nell’albero) può: - ripetersi al passo successivo nel codice (essere connesso alla foglia successiva di etichetta minima) - diventare foglia a sua volta; ogni volta che una nuova etichetta m viene generata, si aggiunge una nuova riga (e colonna) ad OD. I valori della riga (e colonna) si ottengono decrementando di 1 quelli della foglia f che ha il nodo interno m come padre. OD(m,f) = OD(f,m)= 1 ASD a.a.2010/2011- Lezione 10 16