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