Esercizio - Entropia, codici di Huffman e Exp-Golomb (domande ed esercizi del corso)
In questa pagina 4
Teoria: Codifica lossless - entropia, Huffman e codifiche a dizionarioLa codifica lossless rappresenta i simboli di una sorgente con parole di codice a lunghezza variabile in modo invertibile; si usano codici a prefisso (istantanei). L'entropia $H(X)=\sum p_i\log_2\frac1{p_i}$ è il limite: $H(X)\le\mathcal L^*<H(X)+1$ (Shannon), con uguaglianza se le probabilità sono potenze di 1/2. Il codice di Huffman è ottimo ma lascia fino a 1 bit di overhead per simbolo; raggruppando $K$ simboli (codifica a blocchi) si tende al tasso entropico $\mathcal H(X)\le H(X)$, ma la complessità cresce come $M^K$; la codifica aritmetica ($\mathcal L<H+2$ per messaggio) ha complessità lineare. Altre tecniche: dizionario (LZ, DEFLATE di ZIP e PNG, ANS in Zstandard), Exp-Golomb e categoria/ampiezza (usati in JPEG e nei codec video) per interi con probabilità decrescente col modulo, codifica predittiva (si codifica l'errore di predizione, che ha entropia molto più bassa).Codifica lossless - entropia, Huffman e codifiche a dizionario → (entropia, teorema di Shannon, algoritmo di Huffman, codifica a blocchi, Exp-Golomb). Fonte: domande a risposta multipla ed esempi di preparazione del corso di Reti di Calcolatori, Ing. Informatica UniPD 2025-26, e slide del corso. Tutti i conti sono verificati in Python.
Formule di riferimento: ; lunghezza media ; teorema di Shannon (uguaglianza solo per probabilità potenze di ).
1. Entropia
Domanda 1. Una sorgente emette con probabilità e con probabilità . Entropia? (a) 1 bit, (b) 0,5 bit, (c) 2 bit, (d) 0 bit.
bit: (a). (b) è la probabilità, non l'entropia; (c) sarebbe l'entropia di 4 simboli equiprobabili (); (d) è l'entropia di una sorgente deterministica (un simbolo con probabilità 1). Per due simboli equiprobabili si ha il massimo possibile, .
Domanda 2. Quale affermazione è vera? (a) la lunghezza media del codice è sempre all'entropia, (b) sempre , (c) sempre uguale, (d) sempre intera.
(a): per il teorema di Shannon . (b) è falsa (si violerebbe il teorema: nessun codice decodificabile può scendere sotto l'entropia); (c) vale solo per probabilità diadiche; (d) falsa: è una media pesata di interi e in generale non è intera (1,75 nell'esempio ).
Domanda 3 (teorica). Il minimo tasso di codifica senza perdite per un codice a prefisso (a) è maggiore o uguale all'entropia della sorgente, (b) minore o uguale, (c) è sempre un numero intero di bit. (a): è l'enunciato del teorema di Shannon sulla codifica di sorgente (per il codice ottimo, inoltre ).
2. Codici di Huffman
Domanda 4 (sorgente a 4 simboli). . Quale affermazione è corretta? (a) bit e (Huffman), (b) bit e (Huffman), (c) bit, (d) il codice ottimo non esiste.
- Entropia: bit.
- Huffman: si fondono i due meno probabili, ; ora i nodi sono , , ; si fondono e : ; infine . Lunghezze: , , , ; bit, cioè .
- (a) è giusta. (b) è impossibile: violerebbe Shannon (la risposta si può scartare senza fare conti). (c) l'entropia di 4 simboli non può superare . (d) il codice ottimo esiste sempre ed è dato dall'algoritmo di Huffman.
Domanda 5 (sorgente a 6 simboli: limite inferiore). Probabilità . Quale affermazione è esatta? (a) la lunghezza media di un codice senza perdite non può essere inferiore a 1,959 bit, (b) il codice ottimo per questa distribuzione non può essere determinato, (c) il codice ottimo ammette due codeword di lunghezza un bit.
Entropia: bit. (a) vera: nessun codice istantaneo può scendere sotto . (b) falsa: il codice ottimo si determina con Huffman. (c) falsa: due codeword da 1 bit ( e ) esauriscono tutto lo spazio dei prefissi, e con più di due simboli non resterebbe nessuna parola disponibile per gli altri.
Domanda 6 (stessa sorgente: lunghezza media di Huffman). (a) 2 bit/simbolo, (b) 1,959 bit/simbolo, (c) non determinabile, (d) 3 bit/simbolo.
Costruzione: i due meno probabili sono ed , . Poi i due meno probabili sono e , . Poi e il nodo , (a pari probabilità se ne sceglie uno qualunque: la lunghezza media non cambia). Poi e , . Infine e .
| Simbolo | ||||||
|---|---|---|---|---|---|---|
| Codice | 0 | 10 | 110 | 1110 | 11110 | 11111 |
| Lunghezza | 1 | 2 | 3 | 4 | 5 | 5 |
bit: (a). (b) 1,959 è l'entropia: solo per probabilità diadiche, qui non lo sono, quindi . (c) falsa. (d) 3 bit è la lunghezza del codice a lunghezza fissa per 6 simboli (): Huffman fa meglio (2,0).
Domanda 7 (altra sorgente a 6 simboli). . (a) un codice ottimo ha lunghezza media 2,44 bit, (b) 2,61 bit, (c) la lunghezza media di un codice a prefisso può essere inferiore a 2,40 bit, (d) il codice ottimo non può essere determinato.
Entropia: bit. Huffman: ; ; ; ; . Lunghezze: a 2 bit; a 3 bit. Un codice possibile: . bit: (a). (c) falsa perché . (b) è troppo alta per un codice ottimo (sarebbe oltre il minimo); (d) falsa.
3. Decodifica, blocchi ed Exp-Golomb
Decodifica di Huffman (slide). Con il codice , , , (probabilità , ) decodificare . Si legge un bit alla volta: ; ; ; ; ; ; . Risultato: .
Codifica a blocchi (slide). Sorgente , , . . Huffman sui singoli simboli: , , ; bit/simbolo, sopra l'entropia. Sulle 9 coppie: bit per coppia bit/simbolo, solo sopra l'entropia. Il codice a blocchi (grande alfabeto: simboli) ha quasi eliminato l'overhead di un bit per simbolo.
Exp-Golomb (slide): codificare 8.
- uEG: (4 bit), quindi zeri iniziali: .
- sEG: ; (5 bit), 4 zeri: .
- Categoria/ampiezza: categoria , codice della categoria 4: ; ampiezza: su 4 bit; . Lunghezze: 7, 9, 7 bit. Per un numero grande come 8 la codifica per categoria e ampiezza è la più corta.
Decodifica di Exp-Golomb (costruito). Decodificare il flusso unsigned . Si contano gli zeri iniziali, , poi si leggono bit che rappresentano : : , , . Poi : nessuno zero, , . Poi : , , . Risultato: (verificato: ).
Distribuzione diadica (costruito). . bit. Huffman: lunghezze , : perché tutte le probabilità sono potenze di , e il codice assegna a ogni simbolo .
Errori tipici
- Dimenticare di sommare tutte le codeword nella lunghezza media (e di pesarle con le probabilità, non con 1).
- Credere che sia possibile: è la prima opzione da scartare nelle domande.
- Fondere a ogni passo i nodi sbagliati: si fondono sempre i due con probabilità minima (inclusi i nodi già fusi).
- Prendere come lunghezza del codice a lunghezza fissa senza arrotondare (6 simboli: 3 bit, non 2,58).
- Scrivere invece di nella scrittura binaria di uEG (si conta ).
Versione ripasso
Formule. , , (uguaglianza solo per probabilità potenze di ). Huffman: fondere i due nodi a probabilità minima finché ne resta uno; il codice è a prefisso e ottimo; lunghezze indipendenti dalle scelte a parità.
Domande.
- equiprobabili: bit. sempre (non , non sempre uguale, non intera).
- : ; Huffman , , ; lunghezze , (L = 1,5 impossibile perché minore di ).
- : (limite inferiore); Huffman , , , , ; codice , (non diadica). Due codeword da 1 bit sono impossibili con più di due simboli. Codice a lunghezza fissa: 3 bit.
- : , , , , ; lunghezze : 2; : 3; ; non si può scendere sotto .
Decodifica. : (buffer di bit finché è una codeword).
Blocchi. : , singoli (), coppie bit/coppia bit/simbolo ().
Exp-Golomb di 8. uEG: , 3 zeri: . sEG: , : . Categoria/ampiezza: (codice ), : . Decodifica : ; ; , .
Diadica. : (lunghezze ).
Errori tipici: ; fondere i nodi sbagliati; non pesare le lunghezze con le probabilità; non arrotondato per il codice a lunghezza fissa; invece di in uEG.