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
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 : C n = (2n su n)/(n+1)
a
c
a
b
c
d
e
g
b
f
d
e
f
h
g
h
. a b dd b e gg e hh a cc ff .
((( () )( () )())()())
ASD a.a.2010/2011- Lezione 10
Match(b,i)
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
nodi
1 11 10 0 1 10 0 100 1010 0
parentesi
ASD a.a.2010/2011- Lezione 10
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
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
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>
<a> testo <b> testo </a> testo </b>
I marcatori vengono anche chiamati nodi
CORRETTO
INCORRETTO
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
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>
<ruolo>
<attore> Carla Gravina </attore>
<personaggio> Nicoletta </personaggio>
</ruolo>
</cast>
</film>
<film codice = “0060125”>
<titolo> L’armata Brancaleone </titolo>
<regista> Mario Monicelli </regista>
<anno> 1966 </anno>
</film>
</cinematografia>
ASD a.a.2010/2011- Lezione 10
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
5
2
5
1
0
1
3
4
[2,…]
3
6
2
5
1
4
[2,6,…]
[2,6,1,1,5]
ASD a.a.2010/2011- Lezione 10
3
4
[2,6,1…]
L’ALGORITMO DI CODIFICA
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
dg
v
list
1
0  2
3
1  345
2
2  06
1
3  1
1
4  1
2
5  16
2
6  25
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 12 3 4 5 6
2
0
0 1 2 3 4 5 6
6
0 1 2 3 4 5 6
0 1 2 3 4 5 6
6
6
2
0
2
2
1
1
0
3
ASD a.a.2010/2011- Lezione 10
3
4
0
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
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