Def. La lunghezza media L(C) di un codice C per una v.c. X con
Transcript
Def. La lunghezza media L(C) di un codice C per una v.c. X con
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 p (x) · l (x) = E[l(X)] x∈X Obiettivo: Codice ottimo rispetto alla lunghezza media – p. 1/29 Lunghezza media ed Entropia Esempio. X v.c. con valori in {1, 2, 3, 4}, D = {0, 1}, P (X = 1) = 1 2 C(1) = 0 L(C) = 1 2 P (X = 2) = C(2) = 10 C(3) = 110 1 8 P (X = 4) = 1 8 C(4) = 111 X v.c. con valori in {1, 2, 3}, D = {0, 1}, P (X = 1) = 1 3 C(1) = 0 L(C) = P (X = 3) = + 14 2 + 18 3 + 81 3 = 1.75 Esempio. 1 3 1 4 ·1+2· 1 3 P (X = 2) = C(2) = 10 ·2 = 5 3 1 3 P (X = 3) = 1 3 C(3) = 11 = 1.66 – p. 2/29 Lunghezza media ed Entropia La lunghezza media L di un codice D-ario U.D. per v.c. X soddisfa L ≥ HD (X). Uguaglianza vale sse D−l(x) = p(x), ∀x ∈ X . Dim. 1 1 HD (X) − L = E lgD − E [l(X)] = E lgD − lgD Dl(X) p(X) p(X) " # # " D−l(X) D−l(X) = E lgD ≤ lgD E (Dis. Jensen) p(X) p(X) X X D−l(x) p(x) D−l(x) ≤0 (Dis. Kraft) = lgD = lgD p(x) x x D−l(x) /p(x) P Uguaglianza sse: = c ∀x e 1 = x D−l(x) P P −l(x) = x c p(x) = c e p(x) = D−l(x) . Quindi 1 = x D – p. 3/29 L = HD (X) sse per ogni x vale p(x) = D−l(x) , ovvero 1 , l(x) = lgD p(x) Se lgD 1 p(x) non tutti interi? Vediamo quanto la lunghezza media può discostarsi dall’entropia. – p. 4/29 Codice di Shannon Consideriamo X con d.d.p. (p1 , . . . , pm ). Codice di Shannon D-ario: codice prefisso che assegna al simbolo probabilitá pi una parola codice di lunghezza l di m li = lgD 1 pi per i = 1, . . . , m. Codice di Shannon esiste in quanto le lunghezze l1 , . . . , lm soddisfano la dis. di Kraft: X D − l lgD p1 i m ≤ X D − lgD i i 1 pi = X i D lgD pi = X pi = 1 i La lunghezza media è < H(X) + 1: X X X 1 1 < pi lgD + 1 = HD (X) + 1 pi li = pi lgD pi pi i i i – p. 5/29 Codice di Shannon Consideriamo X con d.d.p. (p1 , . . . , pm ). Codice di Shannon D-ario: codice prefisso che assegna al simbolo probabilitá pi una parola codice di lunghezza l di m li = lgD 1 pi per i = 1, . . . , m. Es. D = 2, 1 1 p(x1 ) = 41 p(x2 ) = 41 p(x3 ) = 13 p(x4 ) = 12 p(x5 ) = 12 l1 = 2 l2 = 2 l3 = 2 l4 = 4 l5 = 4 c(x1 ) = 00 c(x2 ) = 01 c(x3 ) = 10 c(x4 ) = 1100 c(x5 ) = 1101 H(X) ≈ 2.13 ≤ L = 2.3 < H(X) + 1 ≈ 3.13 – p. 6/29 Codifica ottimale ∗ le lunghezze delle parole di un Teorema Siano l1∗ , . . . , lm codice U.D. ottimo D-ario per v.c. X con d.d.p. (p1 , . . . , pm ). P ∗ ∗ La lunghezza media L = pi li del codice soddisfa HD (X) ≤ L∗ < HD (X) + 1 Dim. Ogni codice U.D. soddisfa la prima disuguaglianza. Seconda disuguaglianza: Sia C il codice di Shannon D-ario per X : L(C) < HD (X) + 1. La lunghezza media L∗ del codice ottimale soddisfa L∗ ≤ L(C) < HD (X) + 1 – p. 7/29 Costruzione Codici prefissi ottimali (binari) Lemma Per ogni d.d.p. p esiste un codice prefisso ottimo tale che 1. se pj > pk allora lj ≤ lk 2. le due parole più lunghe hanno la stessa lunghezza 3. le due parole più lunghe differiscono solo nell’ultimo bit – p. 8/29 Dim. Siano p1 ≥ p2 ≥ . . . ≥ pm Sia C un codice ottimo con lunghezze l1 , . . . , lm 1. Supponiamo per assurdo che pj > pk e lj > lk : Consideriamo il codice C ′ ottenuto da C scambiando la parola j -esima con la k -esima: C ′ (j) = C(k) C ′ (k) = C(j) – p. 9/29 La lunghezza media di C′ è L′ = P pi li + pj lk + pk lj . i6=j,k La differenza tra L′ e la lunghezza media L di C è L′ − L = X pi li + pj lk + pk lj − i6=j,k m X pi li i=1 = pj lk + pk lj − pj lj − pk lk = pj (lk − lj ) + pk (lj − lk ) = (pj − pk ) (lk − lj ) < 0 (Ricorda pj > pk ma lj > lk ) ⇒ L′ < L; impossibile ⇒ lj ≤ lk . – p. 10/29 2. Supponiamo per assurdo che C contenga un’unica parola di lunghezza massima lmax ⇒ possiamo eliminare l’ultimo bit dalla parola codice di lunghezza lmax ottenendone una di lunghezza lmax − 1 ⇒ otteniamo un codice prefisso con lunghezza media inferiore ad L (impossibile in quanto C è ottimo). – p. 11/29 3. 1 e 2 ⇒ lm = lm−1 = max{li : 1 ≤ i ≤ m} In generale non è vero che codice ottimale soddisfa 3). Esempio. – p. 12/29 Supponiamo che C(m − 1) e C(m) non differiscano solo nell’ultimo bit ⇒ I nodi associati a C(m − 1) e C(m) non sono fratelli ⇒ C(m) ha fratello C(j) con j ≤ m − 2 ⇒ lj = lm = lm−1 Possiamo quindi scambiare C(j) e C(m) ottenendo un codice con lunghezza uguale a quella di C . – p. 13/29 Algoritmo di Huffman Definito ricorsivamente: 1. Si prendano le due probabilitá piú piccole e si assegni a ciascuna un ultimo bit differente. Si faccia il merge dei simboli corrispondenti alle due probabilitá piú piccole in un unico simbolo. 2. ripetere il passo 1 fino ad avere 1 simbolo. – p. 14/29 Esempio Vogliamo costruire un codice ottimale per 1 2 3 4 5 X= .25 .25 .2 .15 .15 – p. 15/29 Si ottiene così l’albero – p. 16/29 Algoritmo di Huffman 1. Si prendano le due probabilitá piú piccole e si assegni a ciascuna un ultimo bit differente. Si faccia il merge dei simboli corrispondenti alle due probabilitá piú piccole in un unico simbolo. 2. ripetere il passo 1 fino ad avere 1 simbolo. Formalmente: Codice Cm per p1 ≥ p2 ≥ . . . ≥ pm è definito a partire da Cm−1 , il codice per p1 , p2 , . . . , p′m−1 , dove p′m−1 = pm−1 + pm : Cm (i) = Cm−1 (i) , i = 1, ..., m − 2 Cm (m − 1) = Cm−1 (m − 1) · 0 Cm (m) = Cm−1 (m − 1) · 1 – p. 17/29 Ottimalitá dei Codici di Huffman Per induzione sul numero m di simboli da codificare Base dell’induzione: per m = 2 si ha C2 = {0, 1} che è ovviamente ottimo. – p. 18/29 Passo induttivo: m P L (Cm ) = pi li , i=1 m−1 P L (Cm−1 ) = i=1 p′i li′ = L (Cm ) − L (Cm−1 ) m−2 P pi li + (pm−1 + pm ) (lm − 1) i=1 = pm−1 lm−1 + pm lm − pm−1 lm − pm lm + pm−1 + pm = pm−1 + pm L (Cm ) − L (Cm−1 ) indipendente da lunghezze del codice per cui (sapendo che in codice ottimale lm = lm−1 ≥ . . . ≥ l1 ) Cm−1 ottimo ⇒ Cm ottimo. – p. 19/29 Nota: Pochè i codici di Huffman sono prefissi e ottimali, allora la lunghezza di un codice di Huffman C ∗ soddisfa H(X) ≤ L(C ∗ ) < H(X) + 1. – p. 20/29 Discorso analogo si può fare per un codice D-rio qualsiasi. Se D = 3 possiamo determinare il codice ternario scegliendo ad ogni passo le tre probabilità più piccole. – p. 21/29 abbiamo così l’albero – p. 22/29 Non sempre è possibile raggruppare le probabilità in gruppi di D. 1 2 3 4 5 6 Esempio. X = .25 .25 .2 .1 .1 .1 – p. 23/29 In questo caso aggiungiamo un simbolo con probabilità zero: – p. 24/29 Un albero D-ario pieno ha 1 + k(D − 1) nodi. Se |X | non è della forma 1 + k(D − 1) aggiungiamo simboli fino ad arrivare all’ intero più vicino ad |X | di questa forma. – p. 25/29 Gioco delle 20 domande GIOCO: individuare un oggetto x in un insieme A con domande del tipo ”x ∈ B ”, B ⊆ A; Risposte: YES/NO SCOPO: Minimizzare numero di domande DOMANDE ⇔ CODICE – DOMANDE ⇒ Sequenze risposte ≡ Codifica bin. oggetti – CODICE ⇒ i–ma domanda: "E’ bit i–mo=1?” Sia X = v.c. che rappresenta oggetti Usando codifica ottimale per X H(X) ≤ numero atteso domande < H(X) + 1 – p. 26/29 Gioco delle 20 domande X= 0 1 2 3 4 5 1 4 1 4 1 8 1 8 1 8 1 8 {0, 1, 2, 3, 4, 5} I bit é 1? NO C(0) = 00 C(1) = 01 C(2) = 100 C(3) = 101 C(4) = 110 C(5) = 111 SI {0, 1} II bit é 1? 0 1 {2, 3, 4, 5} II bit é 1? {2, 3} III bit é 1? 3 2 Num. atteso domande= H(X) = {4, 5} III bit é 1? 4 5 15 8 – p. 27/29 Esercizi Esercizio 1 Mostrare che se un codice D-rio soddisfa la disuguaglianza di Kraft stretta allora esiste y ∈ D∗ che non corrisponde a una sequenza di parole di codice. Esercizio 2 Una sorgente emette 7 simboli 1, . . . , 7 con probabilità, rispettivamente, 0.49, 0.26, 0.12, 0.04, 0.04, 0.03, 0.02 – determinare il codice di Huffman binario – valutare la lunghezza media – trovare il codice di Huffman ternario – p. 28/29 Esercizi Esercizio 3 Fornire un esempio di v.c. X per cui il codice ottimo ha lunghezza media arbitrariamente prossima ad H(X) + 1 (cioè per ogni ǫ > 0, esibire una d.p. per cui L∗ > H(X) + 1 − ǫ). Esercizio 4 Data la d.p. uniforme su m elementi, cosa si può dire rispetto alle lunghezze di un codice di binario ottimo? (Sugg. Applicare algoritmo di Huffman) – p. 29/29