Salta al contenuto
Note per Studenti Esercizio 2 · codice di Huffman a 8 livelli e verifica di Kraft-McMillan (tema d'esame gennaio 2025)

Esercizio 2codice di Huffman a 8 livelli e verifica di Kraft-McMillan (tema d'esame gennaio 2025)

Esame
In questa pagina 3

Testo (tema d'esame gennaio 2025, esercizio 1, punti 4-5). Il quantizzatore viene riprogettato per contenere L=8L=8 livelli, ma ora le probabilità risultano essere p1=p2=p3=0,25p_1=p_2=p_3=0{,}25, p4=0,1p_4=0{,}1, p5=p6=0,05p_5=p_6=0{,}05 e p7=0,04p_7=0{,}04.

  1. (3p) Si progetti la codifica di sorgente ottima.
  2. (2p) È possibile progettare una codifica decodificabile tale per cui le lunghezze delle parole dopo la codifica di sorgente risultino ℓ1=ℓ2=2\ell_1=\ell_2=2 bit, ℓ3=ℓ4=ℓ5=ℓ6=3\ell_3=\ell_4=\ell_5=\ell_6=3 bit e ℓ7=ℓ8=4\ell_7=\ell_8=4 bit?

Teoria usata: Codici di Shannon-Fano e di HuffmanIn un codice ottimo le parole più probabili non sono più lunghe di quelle meno probabili e le due parole più lunghe differiscono solo per l'ultimo simbolo. Shannon-Fano costruisce l'albero dall'alto dividendo ripetutamente i simboli in due gruppi di probabilità quasi uguali; Huffman lo costruisce dal basso unendo ogni volta i due simboli meno probabili ed è sempre ottimo tra i codici a prefisso. La lunghezza media $L_y$ è la somma delle probabilità dei nodi uniti, l'efficienza è $\eta=\frac{H}{L_y}$.Codici di Shannon-Fano e di Huffman →, 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 →, Informazione ed entropiaL'informazione di un evento di probabilità $p$ è $\log_2\frac1p$ bit; l'entropia $H(x)=\sum p\log_2\frac1p$ è l'informazione media e misura l'incertezza della sorgente: $0\le H\le\log_2M$, con il massimo quando i simboli sono equiprobabili. Per più simboli: $H(x,y)\le H(x)+H(y)$ (uguaglianza se indipendenti), $H(x|y)=H(x,y)-H(y)$. Per una sorgente con $F_s$ simboli al secondo il rate di informazione è $F_sH_s$, il rate nominale $F_s\log_2M$ e l'efficienza $\eta=\frac{H_s}{\log_2M}$.Informazione ed entropia →.

(4) Codice ottimo: Huffman

Le probabilità date sommano 0,25⋅3+0,1+0,05⋅2+0,04=0,990{,}25\cdot3+0{,}1+0{,}05\cdot2+0{,}04=0{,}99: l'ottava (non scritta nel testo) è p8=1−0,99=0,01p_8=1-0{,}99=0{,}01.

Costruzione. Si uniscono sempre i due nodi meno probabili (Codici di Shannon-Fano e di HuffmanIn un codice ottimo le parole più probabili non sono più lunghe di quelle meno probabili e le due parole più lunghe differiscono solo per l'ultimo simbolo. Shannon-Fano costruisce l'albero dall'alto dividendo ripetutamente i simboli in due gruppi di probabilità quasi uguali; Huffman lo costruisce dal basso unendo ogni volta i due simboli meno probabili ed è sempre ottimo tra i codici a prefisso. La lunghezza media $L_y$ è la somma delle probabilità dei nodi uniti, l'efficienza è $\eta=\frac{H}{L_y}$.Codici di Shannon-Fano e di Huffman →):

Passo Nodi disponibili Unione
1 0,25, 0,25, 0,25, 0,10, 0,05, 0,05, 0,04, 0,010{,}25,\ 0{,}25,\ 0{,}25,\ 0{,}10,\ 0{,}05,\ 0{,}05,\ 0{,}04,\ 0{,}01 p7+p8=0,05p_7+p_8=0{,}05 (nodo XX)
2 0,253, 0,10, 0,05 (p5), 0,05 (p6), 0,05 (X)0{,}25^3,\ 0{,}10,\ 0{,}05\,(p_5),\ 0{,}05\,(p_6),\ 0{,}05\,(X) p5+p6=0,10p_5+p_6=0{,}10 (nodo YY)
3 0,253, 0,10 (p4), 0,10 (Y), 0,05 (X)0{,}25^3,\ 0{,}10\,(p_4),\ 0{,}10\,(Y),\ 0{,}05\,(X) X+p4=0,15X+p_4=0{,}15 (nodo ZZ)
4 0,253, 0,15 (Z), 0,10 (Y)0{,}25^3,\ 0{,}15\,(Z),\ 0{,}10\,(Y) Y+Z=0,25Y+Z=0{,}25 (nodo WW)
5 0,25 (p1), 0,25 (p2), 0,25 (p3), 0,25 (W)0{,}25\,(p_1),\ 0{,}25\,(p_2),\ 0{,}25\,(p_3),\ 0{,}25\,(W) p1+p2=0,50p_1+p_2=0{,}50
6 0,50, 0,25 (p3), 0,25 (W)0{,}50,\ 0{,}25\,(p_3),\ 0{,}25\,(W) p3+W=0,50p_3+W=0{,}50
7 0,50, 0,500{,}50,\ 0{,}50 radice =1=1

Etichettando con 00 il ramo superiore e 11 l'inferiore ad ogni unione, una possibile assegnazione è

Simbolo pip_i Parola Lunghezza
11 0,250{,}25 0000 22
22 0,250{,}25 0101 22
33 0,250{,}25 1010 22
44 0,100{,}10 11101110 44
55 0,050{,}05 11001100 44
66 0,050{,}05 11011101 44
77 0,040{,}04 1111011110 55
88 0,010{,}01 1111111111 55

Lunghezza media (somma pesata, e controllo con la somma dei nodi interni): Ly=3⋅0,25⋅2+(0,10+0,05+0,05)⋅4+(0,04+0,01)⋅5=1,5+0,8+0,25=2,55 bit,L_y=3\cdot0{,}25\cdot2+(0{,}10+0{,}05+0{,}05)\cdot4+(0{,}04+0{,}01)\cdot5=1{,}5+0{,}8+0{,}25=2{,}55\ \text{bit}, 0,05+0,10+0,15+0,25+0,50+0,50+1=2,55 ✓.0{,}05+0{,}10+0{,}15+0{,}25+0{,}50+0{,}50+1=2{,}55\ \checkmark. Entropia: H=3⋅0,25log⁡24+0,1log⁡210+2⋅0,05log⁡220+0,04log⁡225+0,01log⁡2100=2,517H=3\cdot0{,}25\log_2 4+0{,}1\log_2 10+2\cdot0{,}05\log_2 20+0{,}04\log_2 25+0{,}01\log_2 100=2{,}517 bit. Efficienza η=HLy=2,5172,55=0,987\eta=\frac{H}{L_y}=\frac{2{,}517}{2{,}55}=0{,}987, contro η=2,5173=0,84\eta=\frac{2{,}517}3=0{,}84 della lunghezza fissa a 33 bit; la lunghezza media rispetta H≤Ly<H+1H\le L_y<H+1 (Shannon). Altre scelte a parità di probabilità danno lunghezze diverse (per esempio 33 bit anziché 44 per qualche simbolo), ma sempre lo stesso Ly=2,55L_y=2{,}55.

(5) Le lunghezze 2,2,3,3,3,3,4,42,2,3,3,3,3,4,4

Si applica la disuguaglianza di Kraft-McMillan per un codice binario (My=2M_y=2): un codice decodificabile con queste lunghezze richiede ∑i=1812ℓi=2⋅14+4⋅18+2⋅116=12+12+18=98=1,125>1.\sum_{i=1}^8\frac1{2^{\ell_i}}=2\cdot\frac14+4\cdot\frac18+2\cdot\frac1{16}=\frac12+\frac12+\frac18=\frac98=1{,}125>1. La condizione non è soddisfatta, quindi non esiste nessun codice decodificabile (a maggior ragione a prefisso) con quelle lunghezze. Si vede anche sull'albero: le due parole da 22 bit occupano 12\frac12 delle foglie possibili, le quattro da 33 bit occupano l'altro 12\frac12, e non resta posto per le due da 44 bit (che ne chiederebbero 18\frac18). Con queste lunghezze la lunghezza media sarebbe 2,552{,}55 bit (assegnandole in ordine di probabilità), che non contraddice Shannon (≥H=2,517\ge H=2{,}517): è solo Kraft a escluderlo.

(Verificato con Python: Huffman [2,2,2,4,4,4,5,5][2,2,2,4,4,4,5,5], Ly=2,55L_y=2{,}55, H=2,5166H=2{,}5166; Kraft =1,125=1{,}125.)

Errori comuni

  • Dimenticare di ricavare p8=1−∑pip_8=1-\sum p_i (0,010{,}01).
  • Unire i nodi più probabili, o non riordinare dopo una fusione.
  • Concludere che un codice con Kraft ≤1\le1 sia automaticamente decodificabile, o dire che con Kraft >1>1 si può "aggiustare": se la somma supera 11 la risposta è netta, no.
  • Calcolare LyL_y con le parole del codice senza pesarle per pip_i.

Versione ripasso

Testo. L=8L=8, p=(0,25,0,25,0,25,0,1,0,05,0,05,0,04, p8)p=(0{,}25,0{,}25,0{,}25,0{,}1,0{,}05,0{,}05,0{,}04,\ p_8): codifica ottima; esistono lunghezze 2,2,3,3,3,3,4,42,2,3,3,3,3,4,4? (gennaio 2025).

Teoria collegata