Salta al contenuto
Note per Studenti Codici a prefisso - Kraft-McMillan e limiti di Shannon sulla lunghezza media

Codici a prefisso - Kraft-McMillan e limiti di Shannon sulla lunghezza media

In questa pagina 9

Una sorgente digitale spesso emette più bit del necessario: se i simboli non sono equiprobabili l'entropia è minore di log⁡2M\log_2M (Entropia - informazione di un evento, disuguaglianza di Jensen e valore massimoL'informazione di un evento di probabilità $P$ è $i=\log_2\frac1P$ bit (zero per l'evento certo, additiva per eventi indipendenti). L'entropia di una variabile aleatoria discreta è l'informazione media, $H(x)=E[i_x(x)]=\sum_aP_x(a)\log_2\frac1{P_x(a)}$; vale $0\le H(x)\le\log_2M$ con $M$ cardinalità dell'alfabeto, e il massimo $\log_2M$ si raggiunge se e solo se i simboli sono equiprobabili (dimostrazione con la disuguaglianza di Jensen, perché il logaritmo è strettamente concavo).Entropia - informazione di un evento, disuguaglianza di Jensen e valore massimo →) e si può rappresentare lo stesso messaggio con meno bit. La codifica di sorgente lo fa. Questa nota dice quali codici sono ammissibili (Kraft-McMillan) e quanto corto può essere un codice (teorema di Shannon); la costruzione dei codici ottimi è nella nota successiva (Codici di Shannon, Huffman ed Elias e codifica aritmeticaIl codice di Shannon(-Fano) assegna alla parola $i$ lunghezza $l_i=\lceil-\log_{M_y}p_i\rceil$, soddisfa Kraft-McMillan e ha $H\le L_y<H+1$; è ottimo solo se le probabilità sono potenze di $\frac1{M_y}$. Il codice ottimo (lunghezza media minima) dà parole più lunghe ai simboli meno probabili e ha almeno due parole di lunghezza massima che differiscono solo nell'ultimo simbolo: lo costruisce la procedura di Huffman, che unisce a ogni passo i due nodi meno probabili. Il codice di Elias prende le prime $l_i=\lceil-\log_2p_i\rceil+1$ cifre del punto medio dell'intervallo di ampiezza $p_i$ in $[0,1)$: è a prefisso ma subottimo ($H+1\le L_y<H+2$), e si adatta alla codifica aritmetica adattativa.Codici di Shannon, Huffman ed Elias e codifica aritmetica →).

Versione per Ing. Elettronica: Codifica di sorgente - codici a prefisso e teorema di ShannonLa codifica di sorgente riduce il numero di bit mappando le parole della sorgente in parole di lunghezza variabile (più corte per le più probabili), senza perdere informazione. Il codice deve essere decodificabile; i codici a prefisso (nessuna parola è prefisso di un'altra) lo sono. Kraft-McMillan: se il codice è decodificabile $\sum M_y^{-L(b)}\le1$. Teorema di Shannon: $L_y\ge\frac{H(x)}{\log_2M_y}$ e esiste un codice a prefisso con $L_y\le\frac{H(x)}{\log_2M_y}+1$; l'efficienza è $\eta=\frac{H(x)}{L_y\log_2M_y}$.Codifica di sorgente - codici a prefisso e teorema di Shannon →. Versione per Ing. delle Telecomunicazioni: Codifica di sorgenteLa codifica di sorgente senza perdita assegna ai simboli (o a parole di $N$ simboli) parole di codice di lunghezza variabile, corte per i simboli probabili, con una mappa invertibile. Un codice a prefisso è sempre decodificabile; Kraft-McMillan: se il codice è decodificabile $\sum M^{-l_i}\le1$ e viceversa esiste un codice a prefisso con quelle lunghezze. Shannon: $L\ge\frac{H}{\log_2M}$ e esiste un codice con $L<\frac{H}{\log_2M}+1$ (lunghezze $\lceil\log_M\frac1p\rceil$). Shannon-Fano divide dall'alto, Huffman unisce dal basso i due meno probabili ed è ottimo; raggruppare simboli e la codifica aritmetica si avvicinano al limite.Codifica di sorgente →.

Dove sta la codifica di sorgente

Nella catena di trasmissione digitale il codificatore di sorgente sta subito dopo la sorgente; seguono il codificatore di canale e il modulatore.

S→ Ts COD. SORGENTE→ Tc COD. CANALE→MOD⟶CANALE⟶DEM→DEC. CANALE→DEC. SORGENTE→D\text{S}\xrightarrow{\ T_s\ }\boxed{\text{COD. SORGENTE}}\xrightarrow{\ T_c\ }\boxed{\text{COD. CANALE}}\xrightarrow{}\boxed{\text{MOD}}\longrightarrow\text{CANALE}\longrightarrow\boxed{\text{DEM}}\to\boxed{\text{DEC. CANALE}}\to\boxed{\text{DEC. SORGENTE}}\to\text{D}

Fino al codificatore di canale la comunicazione è digitale e (dopo la codifica di sorgente) affidabile; dal modulatore in poi il segnale è analogico e la comunicazione è inaffidabile (rumore). Il codificatore di sorgente riduce il numero di bit al secondo: se i bit entrano ogni TsT_s e escono ogni TcT_c, allora Tc>TsT_c>T_s e 1Ts>1Tc\frac1{T_s}>\frac1{T_c} bit/s. Esistono due tipi di codifica di sorgente:

Il modello

Il codificatore Ms\mathcal M_s riceve dalla sorgente una parola x‾m\underline x_m (un vettore di uno o più simboli; mm è l'indice del tempo) del dizionario della sorgente Dx\mathcal D_x e produce una parola di codice y‾m=Ms(x‾m)\underline y_m=\mathcal M_s(\underline x_m) nel dizionario del codice Dy\mathcal D_y, formato da sequenze di simboli di un alfabeto di cardinalità MyM_y (per il caso binario My=2M_y=2). Si richiede che:

  1. la codifica sia parola per parola (senza memoria): ogni x‾m\underline x_m è codificata da sola;
  2. la codifica sia invertibile: per ogni y‾∈Dy\underline y\in\mathcal D_y esiste una sola x‾∈Dx\underline x\in\mathcal D_x con y‾=Ms(x‾)\underline y=\mathcal M_s(\underline x).

Le parole di codice hanno lunghezza variabile l(y‾)l(\underline y). Se px‾(a‾)p_{\underline x}(\underline a) è la probabilità che la sorgente emetta la parola a‾∈Dx\underline a\in\mathcal D_x, la metrica per valutare un codice è la lunghezza media.

Definizione (lunghezza media delle parole di codice). Ly=E[l(Ms(x‾))]=∑a‾∈Dxl(Ms(a‾)) px‾(a‾)[simboli di codice per parola].L_y=E\left[l(\mathcal M_s(\underline x))\right]=\sum_{\underline a\in\mathcal D_x}l\left(\mathcal M_s(\underline a)\right)\,p_{\underline x}(\underline a)\quad[\text{simboli di codice per parola}].

Un buon codice dà parole corte ai simboli frequenti e lunghe ai rari. Invertibile da sola non basta: il ricevitore riceve un flusso continuo e deve separare le parole.

Esempio (codice non decodificabile). Sorgente con Dx={A,B,C,D}\mathcal D_x=\{A,B,C,D\} di probabilità 0,1; 0,2; 0,3; 0,40{,}1;\ 0{,}2;\ 0{,}3;\ 0{,}4 e codice A→01A\to01, B→101B\to101, C→1111C\to1111, D→0101D\to0101. La lunghezza media è Ly=0,1⋅2+0,2⋅3+0,3⋅4+0,4⋅4=0,2+0,6+1,2+1,6=3,6 bit.L_y=0{,}1\cdot2+0{,}2\cdot3+0{,}3\cdot4+0{,}4\cdot4=0{,}2+0{,}6+1{,}2+1{,}6=3{,}6\ \text{bit}. Ma il flusso …01 01…\dots01\,01\dots può essere letto come A AA\,A oppure come D=0101D=0101: il codice non è decodificabile. La causa è che 0101 è l'inizio (prefisso) di 01010101.

Codici a prefisso

Definizione. In un codice a prefisso nessuna parola di codice è il prefisso (la parte iniziale) di un'altra parola.

Esempio. {1, 010, 0110, 0111}\{1,\ 010,\ 0110,\ 0111\} è a prefisso. Il flusso 1 ∣ 0110 ∣ 0111 ∣ 010 ∣ 11\,|\,0110\,|\,0111\,|\,010\,|\,1 si separa in modo unico: appena i bit letti formano una parola del codice, quella parola è finita (nessuna parola più lunga può iniziare con essa). Per questo la decodifica è istantanea, senza bisogno di guardare i bit seguenti. Un codice a prefisso è sempre decodificabile. Il contrario non vale in generale (esistono codici decodificabili non a prefisso, ma non servono: sono sempre eguagliati da un codice a prefisso con le stesse lunghezze, per il teorema che segue).

Un codice a prefisso si rappresenta con un albero MyM_y-ario: ogni parola è una foglia, nessuna foglia è antenata di un'altra.

Grafico interattivo: Albero del codice a prefisso {1, 010, 0110, 0111}: da ogni nodo partono due rami etichettati 0 e 1; le parole di codice sono le foglie (cerchi grandi) e nessuna è antenata di un'altra. Il nodo 00 è inutilizzato (un ramo non assegnato)

Teorema di Kraft-McMillan

Teorema (Kraft-McMillan). Sia MyM_y la cardinalità dell'alfabeto di codice.

  1. (Condizione necessaria.) Per ogni codificatore decodificabile senza perdite, con parole di lunghezza l1,…,lNl_1,\dots,l_N, ∑i=1N1My li≤1.\boxed{\sum_{i=1}^N\frac1{M_y^{\,l_i}}\le1.}
  2. (Esistenza.) Se l1,…,lNl_1,\dots,l_N sono interi che soddisfano la disuguaglianza (con MyM_y intero), esiste un codice a prefisso con alfabeto di cardinalità MyM_y e parole di lunghezza l1,…,lNl_1,\dots,l_N.

Il teorema dice due cose: nessun codice decodificabile può avere lunghezze che violano la somma ≤1\le1; e se la somma è ≤1\le1 le lunghezze vanno bene, anche a prefisso. Attenzione: la condizione riguarda le lunghezze, non un codice dato. Un codice con somma ≤1\le1 può non essere decodificabile: quello dell'esempio (A→01A\to01, B→101B\to101, C→1111C\to1111, D→0101D\to0101) ha 14+18+116+116=0,5≤1\frac14+\frac18+\frac1{16}+\frac1{16}=0{,}5\le1, eppure non è decodificabile; esiste però un altro codice a prefisso con le stesse lunghezze 2,3,4,42,3,4,4 (per esempio 00, 010, 0110, 011100,\ 010,\ 0110,\ 0111).

Perché (codici a prefisso, binari). Sia lmax⁡l_{\max} la lunghezza massima. Ogni parola di lunghezza lil_i ha 2lmax⁡−li2^{l_{\max}-l_i} discendenti alla profondità lmax⁡l_{\max}, e per la proprietà del prefisso questi insiemi di discendenti sono disgiunti. In tutto ci sono 2lmax⁡2^{l_{\max}} nodi alla profondità lmax⁡l_{\max}, quindi ∑i2lmax⁡−li≤2lmax⁡\sum_i2^{l_{\max}-l_i}\le2^{l_{\max}}, cioè ∑i2−li≤1\sum_i2^{-l_i}\le1. Per l'esistenza si ordinano le lunghezze l1≤⋯≤lNl_1\le\dots\le l_N e si assegna alla parola ii le prime lil_i cifre dello sviluppo in base MyM_y del numero ci=∑j<iMy−ljc_i=\sum_{j<i}M_y^{-l_j}: la somma ≤1\le1 garantisce ci<1c_i<1, e le parole successive non possono iniziare con una precedente, perché ci−cj≥My−ljc_i-c_j\ge M_y^{-l_j}. Per il caso generale dei codici decodificabili (McMillan) si usa la potenza kk-esima: (∑iMy−li)k=∑mNk(m)My−m\left(\sum_iM_y^{-l_i}\right)^k=\sum_mN_k(m)M_y^{-m} con Nk(m)≤MymN_k(m)\le M_y^m numero di sequenze di kk parole lunghe mm (altrimenti due sequenze darebbero la stessa stringa), da cui la somma è al più k lmax⁡k\,l_{\max}; un numero la cui potenza kk-esima cresce al più linearmente in kk non supera 11.

Esempio. Lunghezze 2,2,3,3,3,3,4,42,2,3,3,3,3,4,4 con alfabeto binario: 2⋅14+4⋅18+2⋅116=12+12+18=98>12\cdot\frac14+4\cdot\frac18+2\cdot\frac1{16}=\frac12+\frac12+\frac18=\frac98>1. Non esiste un codice decodificabile con quelle lunghezze. Si vede sull'albero: le due parole da 22 bit occupano metà dei nodi, le quattro da 33 bit l'altra metà, e per le due da 44 bit non resta spazio.

Esempio (alfabeto ternario). Lunghezze 1,1,2,2,2,31,1,2,2,2,3 con My=3M_y=3: 23+39+127=18+9+127=2827=1,037>1\frac23+\frac39+\frac1{27}=\frac{18+9+1}{27}=\frac{28}{27}=1{,}037>1: non esiste un codice decodificabile ternario con quelle lunghezze.

Teorema di Shannon sulla codifica di sorgente

Sia x‾∈Dx\underline x\in\mathcal D_x la parola emessa, con entropia H(x‾)H(\underline x) (in bit).

Teorema (Shannon, codifica di sorgente). Per un codificatore senza perdite con alfabeto di cardinalità MyM_y:

  1. (Limite inferiore.) Ogni codice decodificabile ha Ly≥H(x‾)log⁡2My\displaystyle L_y\ge\frac{H(\underline x)}{\log_2M_y}.
  2. (Esistenza.) Esiste un codice a prefisso con Ly<H(x‾)log⁡2My+1\displaystyle L_y<\frac{H(\underline x)}{\log_2M_y}+1.

In sintesi, esiste sempre un codice a prefisso con H(x‾)log⁡2My≤Ly<H(x‾)log⁡2My+1.\boxed{\frac{H(\underline x)}{\log_2M_y}\le L_y<\frac{H(\underline x)}{\log_2M_y}+1.} Per il codice binario (My=2M_y=2): H(x‾)≤Ly<H(x‾)+1H(\underline x)\le L_y<H(\underline x)+1, in bit per parola.

L'entropia è dunque il limite fondamentale: nessun codice può scendere sotto di essa, e con un codice a prefisso ci si avvicina a meno di 11 bit.

Dimostrazione del limite inferiore. Dalla disuguaglianza di Kraft-McMillan, riscrivendo ogni termine con la probabilità py‾(y‾)=px‾(x‾)p_{\underline y}(\underline y)=p_{\underline x}(\underline x) (il codice è invertibile): 1≥∑y‾1Myl(y‾)=∑y‾py‾(y‾)⋅1Myl(y‾)py‾(y‾)=E[1Myl(y‾)py‾(y‾)].1\ge\sum_{\underline y}\frac1{M_y^{l(\underline y)}}=\sum_{\underline y}p_{\underline y}(\underline y)\cdot\frac1{M_y^{l(\underline y)}p_{\underline y}(\underline y)}=E\left[\frac1{M_y^{l(\underline y)}p_{\underline y}(\underline y)}\right]. Passando ai logaritmi, il logaritmo di un numero ≤1\le1 è ≤0\le0, e si applica Jensen (Entropia - informazione di un evento, disuguaglianza di Jensen e valore massimoL'informazione di un evento di probabilità $P$ è $i=\log_2\frac1P$ bit (zero per l'evento certo, additiva per eventi indipendenti). L'entropia di una variabile aleatoria discreta è l'informazione media, $H(x)=E[i_x(x)]=\sum_aP_x(a)\log_2\frac1{P_x(a)}$; vale $0\le H(x)\le\log_2M$ con $M$ cardinalità dell'alfabeto, e il massimo $\log_2M$ si raggiunge se e solo se i simboli sono equiprobabili (dimostrazione con la disuguaglianza di Jensen, perché il logaritmo è strettamente concavo).Entropia - informazione di un evento, disuguaglianza di Jensen e valore massimo →) al logaritmo, concavo: 0≥log⁡2E[1Myl(y‾)py‾(y‾)]≥E[log⁡21Myl(y‾)py‾(y‾)]=E[−l(y‾)log⁡2My+log⁡21py‾(y‾)]=−Lylog⁡2My+H(x‾).0\ge\log_2E\left[\frac1{M_y^{l(\underline y)}p_{\underline y}(\underline y)}\right]\ge E\left[\log_2\frac1{M_y^{l(\underline y)}p_{\underline y}(\underline y)}\right]=E\left[-l(\underline y)\log_2M_y+\log_2\frac1{p_{\underline y}(\underline y)}\right]=-L_y\log_2M_y+H(\underline x). Da 0≥H(x‾)−Lylog⁡2My0\ge H(\underline x)-L_y\log_2M_y segue Ly≥H(x‾)log⁡2MyL_y\ge\frac{H(\underline x)}{\log_2M_y}. ■\blacksquare

Dimostrazione dell'esistenza. Si scelgono le lunghezze li=⌈log⁡1/Mypx‾(a‾i)⌉=⌈−log⁡Mypx‾(a‾i)⌉,cioeˋ li=⌈log⁡21pilog⁡2My⌉.l_i=\left\lceil\log_{1/M_y}p_{\underline x}(\underline a_i)\right\rceil=\left\lceil-\log_{M_y}p_{\underline x}(\underline a_i)\right\rceil,\qquad\text{cioè }l_i=\left\lceil\frac{\log_2\frac1{p_i}}{\log_2M_y}\right\rceil. (il logaritmo in base 1My<1\frac1{M_y}<1 di una probabilità è positivo).

  • Soddisfano Kraft-McMillan: poiché ⌈u⌉≥u\lceil u\rceil\ge u e la base 1My\frac1{M_y} è minore di 11, (1My)li≤(1My)log⁡1/Mypi=pi\left(\frac1{M_y}\right)^{l_i}\le\left(\frac1{M_y}\right)^{\log_{1/M_y}p_i}=p_i. Sommando: ∑iMy−li≤∑ipi=1\sum_iM_y^{-l_i}\le\sum_ip_i=1. Quindi esiste un codice a prefisso con queste lunghezze.
  • Lunghezza media: da ⌈u⌉<u+1\lceil u\rceil<u+1, Ly=∑ipi li<∑ipi[log⁡21pilog⁡2My+1]=H(x‾)log⁡2My+1,L_y=\sum_ip_i\,l_i<\sum_ip_i\left[\frac{\log_2\frac1{p_i}}{\log_2M_y}+1\right]=\frac{H(\underline x)}{\log_2M_y}+1, dove si è fatto un cambio di base del logaritmo (log⁡Myu=log⁡2ulog⁡2My\log_{M_y}u=\frac{\log_2u}{\log_2M_y}). ■\blacksquare

Quando si raggiunge il limite. Ly=Hlog⁡2MyL_y=\frac{H}{\log_2M_y} solo se le probabilità sono potenze intere di 1My\frac1{M_y}, pi=My−kip_i=M_y^{-k_i}: allora li=kil_i=k_i esatti, senza arrotondamento. Per esempio p=(12,14,18,18)p=\left(\frac12,\frac14,\frac18,\frac18\right) con My=2M_y=2 ha lunghezze 1,2,3,31,2,3,3, Ly=1,75=HL_y=1{,}75=H.

Esempio (alfabeto ternario). Stessa sorgente con My=3M_y=3: lunghezze ⌈log⁡32⌉=1\lceil\log_32\rceil=1, ⌈log⁡34⌉=2\lceil\log_34\rceil=2, ⌈log⁡38⌉=2, 2\lceil\log_38\rceil=2,\ 2. Kraft: 13+3⋅19=23≤1\frac13+3\cdot\frac19=\frac23\le1. Lunghezza media Ly=0,5⋅1+0,25⋅2+0,25⋅2=1,5L_y=0{,}5\cdot1+0{,}25\cdot2+0{,}25\cdot2=1{,}5 simboli ternari. Limiti: Hlog⁡23=1,751,585=1,104\frac H{\log_23}=\frac{1{,}75}{1{,}585}=1{,}104 e 1,104+1=2,1041{,}104+1=2{,}104: 1,104≤1,5<2,1041{,}104\le1{,}5<2{,}104 ✓.

Raggruppare più simboli per avvicinarsi al limite

Il "+1" del limite superiore è un costo per parola. Se si codificano blocchi di NN simboli indipendenti, l'entropia della parola è NHsNH_s e la lunghezza media per simbolo LyN\frac{L_y}N soddisfa Hs≤LyN<Hs+1NH_s\le\frac{L_y}N<H_s+\frac1N: tende al limite.

Esempio. Sorgente binaria con P(0)=0,9P(0)=0{,}9, P(1)=0,1P(1)=0{,}1, H=0,469H=0{,}469 bit per simbolo. Codificando un simbolo alla volta serve sempre 11 bit (due parole, lunghezze 1,11,1): L=1L=1 bit per simbolo, il 213%213\% di HH. A coppie (00,01,10,1100,01,10,11 con probabilità 0,81; 0,09; 0,09; 0,010{,}81;\ 0{,}09;\ 0{,}09;\ 0{,}01) il codice ottimo ha lunghezze 1,2,3,31,2,3,3 e Ly=0,81+0,18+0,27+0,03=1,29L_y=0{,}81+0{,}18+0{,}27+0{,}03=1{,}29 bit per coppia, cioè 0,6450{,}645 bit per simbolo; a triple si scende a 0,5330{,}533 bit per simbolo (valori calcolati con Python). L'efficienza sale, a prezzo di un ritardo e una complessità maggiori.

Errori comuni

  • Usare Kraft-McMillan per dimostrare che un codice dato è decodificabile: la somma ≤1\le1 vale per le lunghezze, un codice può violare il prefisso pur rispettandola.
  • Concludere da ∑My−li>1\sum M_y^{-l_i}>1 che "si può aggiustare qualche parola": la risposta è netta, non esiste nessun codice decodificabile con quelle lunghezze.
  • Confrontare LyL_y con HH senza dividere per log⁡2My\log_2M_y per alfabeti non binari.
  • Dire che il codice di Shannon ha Ly=HL_y=H: vale solo con probabilità potenze di 1My\frac1{M_y}; in generale è H≤Ly<H+1H\le L_y<H+1.
  • Calcolare LyL_y senza pesare le lunghezze con le probabilità.
  • Dimenticare che il codice a prefisso con Ly<H+1L_y<H+1 può non essere ottimo: il limite superiore dice solo che il migliore ci sta sotto.

Domande d'esame

  1. Si enunci la disuguaglianza di Kraft-McMillan e la si usi per stabilire se esiste un codice binario con lunghezze 2,3,3,3,4,4,5,52,3,3,3,4,4,5,5. ∑i2−li≤1\sum_i2^{-l_i}\le1 è necessaria per la decodificabilità e sufficiente per l'esistenza di un prefisso. Qui 14+3⋅18+2⋅116+2⋅132=8+12+4+232=2632<1\frac14+3\cdot\frac18+2\cdot\frac1{16}+2\cdot\frac1{32}=\frac{8+12+4+2}{32}=\frac{26}{32}<1: il codice esiste.
  2. Si enunci il teorema di Shannon per la codifica di sorgente e se ne dimostri il limite inferiore. Hlog⁡2My≤Ly<Hlog⁡2My+1\frac H{\log_2M_y}\le L_y<\frac H{\log_2M_y}+1; limite inferiore: da Kraft, 1≥E[1Mylp]1\ge E\left[\frac1{M_y^{l}p}\right], logaritmo e Jensen danno 0≥H−Lylog⁡2My0\ge H-L_y\log_2M_y.
  3. Un codice di Shannon binario per una sorgente con H=2,45H=2{,}45 bit può avere lunghezza media 44 bit? No: il codice di Shannon ha Ly<H+1=3,45L_y<H+1=3{,}45 bit.

Esercizi svolti

Versione ripasso

Contesto e modello (Codifica di sorgente - codici a prefisso e teorema di ShannonLa codifica di sorgente riduce il numero di bit mappando le parole della sorgente in parole di lunghezza variabile (più corte per le più probabili), senza perdere informazione. Il codice deve essere decodificabile; i codici a prefisso (nessuna parola è prefisso di un'altra) lo sono. Kraft-McMillan: se il codice è decodificabile $\sum M_y^{-L(b)}\le1$. Teorema di Shannon: $L_y\ge\frac{H(x)}{\log_2M_y}$ e esiste un codice a prefisso con $L_y\le\frac{H(x)}{\log_2M_y}+1$; l'efficienza è $\eta=\frac{H(x)}{L_y\log_2M_y}$.Codifica di sorgente - codici a prefisso e teorema di Shannon →, Codifica di sorgenteLa codifica di sorgente senza perdita assegna ai simboli (o a parole di $N$ simboli) parole di codice di lunghezza variabile, corte per i simboli probabili, con una mappa invertibile. Un codice a prefisso è sempre decodificabile; Kraft-McMillan: se il codice è decodificabile $\sum M^{-l_i}\le1$ e viceversa esiste un codice a prefisso con quelle lunghezze. Shannon: $L\ge\frac{H}{\log_2M}$ e esiste un codice con $L<\frac{H}{\log_2M}+1$ (lunghezze $\lceil\log_M\frac1p\rceil$). Shannon-Fano divide dall'alto, Huffman unisce dal basso i due meno probabili ed è ottimo; raggruppare simboli e la codifica aritmetica si avvicinano al limite.Codifica di sorgente →)

  • Catena: sorgente →\to cod. sorgente →\to cod. canale →\to mod. Il cod. di sorgente riduce i bit/s: Tc>TsT_c>T_s. Senza perdite (questa nota) o con perdite (quantizzazione).
  • Ms\mathcal M_s: parola per parola, invertibile; x‾∈Dx→y‾∈Dy\underline x\in\mathcal D_x\to\underline y\in\mathcal D_y di lunghezza variabile, alfabeto di cardinalità MyM_y.
  • Ly=∑a‾l(Ms(a‾)) px‾(a‾)\boxed{L_y=\sum_{\underline a}l(\mathcal M_s(\underline a))\,p_{\underline x}(\underline a)}: parole corte ai simboli frequenti.
  • Esempio non decodificabile (0,1;0,2;0,3;0,40{,}1;0{,}2;0{,}3;0{,}4): A→01A\to01, B→101B\to101, C→1111C\to1111, D→0101D\to0101, Ly=0,2+0,6+1,2+1,6=3,6L_y=0{,}2+0{,}6+1{,}2+1{,}6=3{,}6; il flusso 01 0101\,01 è AAAA oppure DD.

Codici a prefisso

  • Nessuna parola è l'inizio di un'altra: decodifica istantanea, sempre decodificabile. Esempio {1,010,0110,0111}\{1,010,0110,0111\} (albero: le parole sono foglie).

Kraft-McMillan

  • Decodificabile ⇒∑iMy−li≤1\Rightarrow\boxed{\sum_iM_y^{-l_i}\le1}. Interi lil_i con somma ≤1\le1 (MyM_y intero) ⇒\Rightarrow esiste un codice a prefisso con quelle lunghezze.
  • Riguarda le lunghezze, non un codice dato: 2,3,4,42,3,4,4 dà 14+18+116+116=0,5\frac14+\frac18+\frac1{16}+\frac1{16}=0{,}5, ma A→01A\to01, D→0101D\to0101 non è decodificabile (esiste 00,010,0110,011100,010,0110,0111).
  • Prova per i prefissi: i discendenti a profondità lmax⁡l_{\max} sono disgiunti, ∑2lmax⁡−li≤2lmax⁡\sum2^{l_{\max}-l_i}\le2^{l_{\max}}. Esistenza: parola ii = prime lil_i cifre di ci=∑j<iMy−ljc_i=\sum_{j<i}M_y^{-l_j} con lil_i ordinate. McMillan: (∑My−li)k=∑mNk(m)My−m≤k lmax⁡\left(\sum M_y^{-l_i}\right)^k=\sum_mN_k(m)M_y^{-m}\le k\,l_{\max} perché Nk(m)≤MymN_k(m)\le M_y^m.
  • 2,2,3,3,3,3,4,42,2,3,3,3,3,4,4 (binario): 12+12+18=98>1\frac12+\frac12+\frac18=\frac98>1, non esiste. Ternario 1,1,2,2,2,31,1,2,2,2,3: 23+39+127=2827>1\frac23+\frac39+\frac1{27}=\frac{28}{27}>1, non esiste.

Teorema di Shannon (Entropia - informazione di un evento, disuguaglianza di Jensen e valore massimoL'informazione di un evento di probabilità $P$ è $i=\log_2\frac1P$ bit (zero per l'evento certo, additiva per eventi indipendenti). L'entropia di una variabile aleatoria discreta è l'informazione media, $H(x)=E[i_x(x)]=\sum_aP_x(a)\log_2\frac1{P_x(a)}$; vale $0\le H(x)\le\log_2M$ con $M$ cardinalità dell'alfabeto, e il massimo $\log_2M$ si raggiunge se e solo se i simboli sono equiprobabili (dimostrazione con la disuguaglianza di Jensen, perché il logaritmo è strettamente concavo).Entropia - informazione di un evento, disuguaglianza di Jensen e valore massimo →)

  • H(x‾)log⁡2My≤Ly<H(x‾)log⁡2My+1\boxed{\frac{H(\underline x)}{\log_2M_y}\le L_y<\frac{H(\underline x)}{\log_2M_y}+1}; binario H≤Ly<H+1H\le L_y<H+1.
  • Inferiore. Kraft: 1≥∑y‾My−l=E[1Myl(y‾)py‾(y‾)]1\ge\sum_{\underline y}M_y^{-l}=E\left[\frac1{M_y^{l(\underline y)}p_{\underline y}(\underline y)}\right]. Logaritmo e Jensen: 0≥log⁡2E[⋅]≥E[log⁡21Mylp]=−Lylog⁡2My+H0\ge\log_2E[\cdot]\ge E\left[\log_2\frac1{M_y^lp}\right]=-L_y\log_2M_y+H, quindi Ly≥Hlog⁡2MyL_y\ge\frac H{\log_2M_y}.
  • Esistenza. li=⌈−log⁡Mypi⌉l_i=\lceil-\log_{M_y}p_i\rceil: My−li≤piM_y^{-l_i}\le p_i dà Kraft (∑≤1\sum\le1); ⌈u⌉<u+1\lceil u\rceil<u+1 dà Ly<∑pi[log⁡2(1/pi)log⁡2My+1]=Hlog⁡2My+1L_y<\sum p_i\left[\frac{\log_2(1/p_i)}{\log_2M_y}+1\right]=\frac H{\log_2M_y}+1 (cambio di base).
  • Uguaglianza Ly=Hlog⁡2MyL_y=\frac H{\log_2M_y} solo se pi=My−kip_i=M_y^{-k_i}: (12,14,18,18)\left(\frac12,\frac14,\frac18,\frac18\right), l=1,2,3,3l=1,2,3,3, Ly=1,75=HL_y=1{,}75=H.
  • Ternario, stesse probabilità: l=1,2,2,2l=1,2,2,2, 13+39=23\frac13+\frac39=\frac23, Ly=1,5L_y=1{,}5; limiti 1,75log⁡23=1,104≤1,5<2,104\frac{1{,}75}{\log_23}=1{,}104\le1{,}5<2{,}104.

Blocchi di NN simboli

  • Hs≤LyN<Hs+1NH_s\le\frac{L_y}N<H_s+\frac1N: il "+1" si ripartisce sui NN simboli.
  • P(0)=0,9P(0)=0{,}9, H=0,469H=0{,}469: singoli 11 bit (213%213\% di HH); coppie {0,81;0,09;0,09;0,01}\{0{,}81;0{,}09;0{,}09;0{,}01\} con 1,2,3,31,2,3,3: Ly=1,29L_y=1{,}29, cioè 0,6450{,}645 per simbolo; triple 0,5330{,}533.

Errori tipici

  • Kraft non prova la decodificabilità di un codice dato.
  • Con somma >1>1 la risposta è netta: non esiste, non si può "aggiustare".
  • Per My≠2M_y\ne2 dividere HH per log⁡2My\log_2M_y.
  • Non pesare le lunghezze con le probabilità.
  • Ly=HL_y=H per il codice di Shannon: solo con probabilità diadiche.
  • Il limite Ly<H+1L_y<H+1 dice che il codice ottimo ci sta sotto, non che ogni prefisso lo faccia.

Domande tipiche

  • Enunciare Kraft-McMillan e verificare 2,3,3,3,4,4,5,52,3,3,3,4,4,5,5: 2632<1\frac{26}{32}<1, esiste.
  • Enunciare Shannon e dimostrare il limite inferiore.
  • Shannon con H=2,45H=2{,}45 può avere Ly=4L_y=4? No, Ly<3,45L_y<3{,}45.

Esercizi svolti. Esercizio - Kraft-McMillan, Huffman, due canali binari alternati e codice di Hamming (15,11) (compito del 13 febbraio 2026, es. 201); Esercizio - Kraft-McMillan, Huffman, Hamming (7,4) e attenuazione massima con 16-QAM (secondo compitino del 12 gennaio 2024, es. 170); Esercizio - entropia, Kraft-McMillan ternario, Huffman e capacità di due canali binari in cascata (secondo compitino del 14 gennaio 2025, es. 186).

Esercizi su questo argomento

Teoria collegata