Compressione Dati

Transcript

Compressione Dati
Compressione Dati
Teorema codifica sorgente: Entropia fornisce un limite
sia inferiore che superiore al numero di bit per simbolo
sorgente.
. – p.1/21
Compressione Dati
Teorema codifica sorgente: Entropia fornisce un limite
sia inferiore che superiore al numero di bit per simbolo
sorgente.
Risultato non pratico
– risultati valgono per n → ∞
– codifica basata su insieme sequenze tipiche
. – p.1/21
Compressione Dati
Teorema codifica sorgente: Entropia fornisce un limite
sia inferiore che superiore al numero di bit per simbolo
sorgente.
Risultato non pratico
– risultati valgono per n → ∞
– codifica basata su insieme sequenze tipiche
Vedremo: limite teorico è raggiunto da codici di uso
comune.
. – p.1/21
Notazione
Assumiamo per semplicità la seguente notazione :
D = {0, 1, . . . , D − 1}
D∗ : insieme di tutte le possibili sequenze finite
sull’alfabeto D
D∗ = D ∪ D2 ∪ D3 ∪ . . .
C : codice
C(x) : parola codice associata al simbolo x ∈ X
l(x) : lunghezza della parola x
. – p.2/21
Codici a lunghezza variabile
Def. Un codice sorgente D-ario per una v.c. X è una
funzione da X in D ∗ .
Esempio
X=
testa croce
1
2
1
2
!
,
D = {0, 1}
C(testa) = 00, C(croce) = 11,
l(testa) = 2, l(croce) = 2.
. – p.3/21
Lunghezza media di un codice
Def. La lunghezza media L(C) di un codice C per una v.c.
X con d.d.p. P (x) è data da
L(C) =
X
x∈X
p (x) · l (x) = E[l(X)]
Esempio X v.c. con valori in {1, 2, 3, 4}, D = {0, 1},
P (X
P (X
P (X
P (X
L(C) =
1
2
·1+
1
4
= 1) = 1/2
= 2) = 1/4
= 3) = 1/8
= 4) = 1/8
·2+
1
8
·3+
1
8
C(1) = 0
C(2) = 10
C(3) = 110
C(4) = 111
· 3 = 1.75 = H(X)
. – p.4/21
Nell’ esempio precedente si ha H(X) = L(C) ma questa
uguaglianza non è vera in generale.
Esempio X v.c. con valori in {1, 2, 3}, D = {0, 1},
P (X = 1) = 1/3
P (X = 2) = 1/3
P (X = 3) = 1/3
H(X) = log 3, L (C) =
1
3
·1+2·
1
3
C(1) = 0
C(2) = 10
C(3) = 11
5
· 2 = 3 = 1.66.
. – p.5/21
Codici non singolari
Def. Un codice è detto non singolare se ad ogni x ∈ X
viene assegnata una diversa stringa in D ∗ , cioè
xi 6= xj ⇒ C (xi ) 6= C (xj )
I codici presentati negli esempi precedenti sono tutti non singolari.
. – p.6/21
Estensione di un codice
Def.
L’ estensione k –ma C k di un codice C è una funzione che
associa ad ogni x1 . . . xk ∈ X k la stringa in D ∗
C k (x1 , . . . , xk ) = C(x1 )C(x2 ) . . . C(xk ),
L’ estensione C ∗ di C associa a ciascuna sequenza x1 . . . xn
di lunghezza finita su X una stringa in D ∗ :
C∗ = C1 ∪ C2 ∪ C3 ∪ . . .
Esempio C(x1 ) = 00, C(x2) = 11 ⇒ C ∗(x1x2) = 0011
. – p.7/21
Codici univocamente decodificabili
Osservazione: Associare a parole sorgente diverse
parole codice diverse non garantisce che il codice sia
univocamente decodificabile:
Può succedere
C ∗ (x1 , . . . , xm ) = C ∗ (x01 , . . . , x0n )
nonostante si abbia C(xi ) 6= C(x0j ) per ogni i e j .
Es. C = {10, 100, 01, 101}
⇒ 10010101 = 10 − 01 − 01 − 01 = 100 − 10 − 101
. – p.8/21
Codici univocamente decodificabili
Osservazione: Associare a parole sorgente diverse
parole codice diverse non garantisce che il codice sia
univocamente decodificabile:
Può succedere
C ∗ (x1 , . . . , xm ) = C ∗ (x01 , . . . , x0n )
nonostante si abbia C(xi ) 6= C(x0j ) per ogni i e j .
Es. C = {10, 100, 01, 101}
⇒ 10010101 = 10 − 01 − 01 − 01 = 100 − 10 − 101
Def. Un codice si dice univocamente decodificabile se
la sua estensione è non singolare.
. – p.8/21
Codici prefissi
Osservazione: Puó accadere che occorre attendere
che la sequenza codificata sia trasmessa quasi
interamente prima di poter iniziare la decodifica
Es. C = {10, 100, 01, }
⇒ 1001010 . . . 10100 = 10 − 01 − . . . − 01 − 01−? =
100 − 10 − 10 − . . . 10 − 100
. – p.9/21
Codici prefissi
Osservazione: Puó accadere che occorre attendere
che la sequenza codificata sia trasmessa quasi
interamente prima di poter iniziare la decodifica
Es. C = {10, 100, 01, }
⇒ 1001010 . . . 10100 = 10 − 01 − . . . − 01 − 01−? =
100 − 10 − 10 − . . . 10 − 100
Def. Un codice si dice prefisso se nessuna parola di
codice è prefissa di un’altra.
. – p.9/21
Codici prefissi
Osservazione: Puó accadere che occorre attendere
che la sequenza codificata sia trasmessa quasi
interamente prima di poter iniziare la decodifica
Es. C = {10, 100, 01, }
⇒ 1001010 . . . 10100 = 10 − 01 − . . . − 01 − 01−? =
100 − 10 − 10 − . . . 10 − 100
Def. Un codice si dice prefisso se nessuna parola di
codice è prefissa di un’altra.
Un codice prefisso é univocamente decodificabile con
ritardo finito
. – p.9/21
. – p.10/21
Esempi di codici
X
1
2
3
4
Singolare
0
0
0
1
Ambiguo
Non Singolare
0
010
01
10
Ambiguo
Es.
010 →2
010 → 1 4
010 → 3 1
U.D. non prefisso
10
00
11
110
Per decodificare
occorre scandire
l’intera sequenza
Es.
11000010
110000010
Si det. I simbolo
solo alla fine
Prefisso
0
10
110
111
. – p.11/21
Alberi e Codici Prefissi
Dato un codice D-ario C prefisso è possibile associare a C
un albero D-ario:
i rami dell’albero sono etichettati con le lettere
dell’alfabeto D-ario {0, . . . , D − 1}
ciascuna parola di C possa essere ottenuta leggendo le
etichette dei rami lungo il percorso dalla radice ad una
certa foglia dell’albero.
. – p.12/21
Esempio Dato il codice {111, 110, 10, 0} sull’alfabeto
D = {0, 1}, possiamo costruire l’albero D-ario:
. – p.13/21
Disuguaglianza di Kraft
La disuguaglianza di Kraft lega la lunghezza delle parole
codice alla cardinalità dell’alfabeto.
(Parte Diretta) Per ogni codice prefisso D-ario, le lunghezze
delle parole codice l1 , . . . , lm devono soddisfare la seguente
disugluaglianza:
m
X
D−li ≤ 1
i=1
(Parte Inversa) Se l1 , . . . , lm soddisfano la disuguaglianza di
Kraft, allora esiste un codice prefisso D-ario le cui parole
hanno lunghezze l1 . . . , lm .
. – p.14/21
Dimostrazione parte diretta
Dim.
C : codice prefisso D-ario con lunghezze delle parole
codice l1 , . . . , lm .
lmax : lunghezza massima delle parole di C ≡ altezza
massima dell’albero D-ario associato a C
T : albero D-ario completo di altezza lmax (T ha D lmax
foglie).
Trasformiamo T nell’albero associato a C .
. – p.15/21
Esempio
. – p.16/21
per ogni lunghezza li , i = 1, . . . , m, dobbiamo eliminare
un sottoalbero di altezza lmax − li
⇒ per ogni i = 1, . . . , m, vengono eliminate D lmax −li
foglie
P lmax −li
⇒ in totale vengono eliminate
D
foglie
i
poichè il numero di foglie eliminate non può superare il
numero totale delle foglie di T si ha
X
X
Dlmax −li ≤ Dlmax ⇒
D−li ≤ 1
i
i
. – p.17/21
Dimostrazione parte inversa
Dim. Supponiamo che
l1 , . . . , lm soddisfano la disuguaglianza di Kraft
l1 ≤ . . . ≤ lm (se così non fosse potremmo sempre
riordinarle).
Consideriamo l’albero D-ario completo di altezza lm e
proviamo a trasformarlo in un albero che rappresenta un
codice D-ario prefisso:
Prima di tutto etichettiamo i rami uscenti da ciascun nodo
interno con gli interi 0, 1, . . . , D − 1.
. – p.18/21
Per ogni i = 1, . . . , m:
consideriamo il primo nodo disponibile di profondità li
(primo secondo l’ ordine lessicografico delle parole che
si leggono andando dalla radice ai nodi).
Eliminiamo il sottoalbero di questo nodo dall’albero ed
associamo alla foglia che abbiamo appena creato la
parola codice i (vedi esempio).
⇒ Eliminiamo D lm −li foglie
⇒ Al passo i-esimo in totale abbiamo eliminato
Pi
lm −lj foglie.
D
j=1
. – p.19/21
Esempio
Lunghezze
1,2,2,2,2,2,3,3,3
disfano la disuguaglianza di Kraft,
D
che
=
sod-
{0, 1, 2}.
. – p.20/21
Il numero di foglie eliminte nei primi i (i < m) passi è
i
X
j=1
Dlm −lj =
i+1
X
j=1
Dlm −lj − Dlm −li+1 ≤ Dlm
m
X
j=1
D−lj − Dlm −li+1
Poichè l1 , . . . , lm soddisfano la dis. di Kraft si ha
D lm
m
X
j=1
D−lj − Dlm −li+1 ≤ Dlm − Dlm −li+1
⇒ Dlm − foglie eliminate al passo i-esimo ≥ D lm −li+1
⇒ possiamo eseguire il passo (i + 1)-esimo.
. – p.21/21