Codici di Shannon-Fano e di Huffman
In questa pagina 6
Il teorema di Shannon (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 →) dà solo i limiti . Questi due algoritmi costruiscono codici a prefisso concreti.
Come deve essere un codice ottimo
Un codice è ottimo se ha la minima lunghezza media tra i codici decodificabili per la stessa sorgente. Due proprietà (codici binari):
- Proposizione 1. Se è ottimo e , allora . Dimostrazione per assurdo: se fosse con , scambiando le due parole la nuova lunghezza media è , e il prodotto dei due fattori (entrambi ) è , quindi : il codice non era ottimo se vale la disuguaglianza stretta.
- Proposizione 2. In un codice ottimo esistono due parole di lunghezza massima identiche tranne l'ultimo simbolo (se non fosse così, si potrebbe accorciare l'ultima parola togliendole l'ultimo bit).
Codifica di Shannon-Fano
Procedura top-downdall'alto verso il basso: si parte dalla radice dell'albero (dall'alto):
- si ordinano i simboli per probabilità decrescente;
- si dividono in due sottoinsiemi (primi e restanti) con probabilità totali le più vicine possibile;
- si ripete la divisione in ciascun sottoinsieme, fino ad avere un solo simbolo per gruppo;
- a ogni ramo si associa 0 (gruppo di sinistra) o 1 (di destra); la parola di un simbolo è la sequenza di etichette dalla radice.
Esempio. .
| Passo | Gruppi |
|---|---|
| 1 | (0,57) e (0,43): differenza minima (0,14) |
| 2 | ; (0,20) e (0,23) |
| 3 |
Parole: . Lunghezza media bit.
La divisione "quasi uguale" non sempre è unica e l'algoritmo non garantisce l'ottimo (lo fa se le probabilità sono potenze di ).
Codifica di Huffman
Procedura bottom-updal basso verso l'alto: si parte dalle foglie (dal basso):
- si ordinano i simboli per probabilità decrescente;
- si raggruppano i due simboli con probabilità minima in un nuovo nodo, con probabilità la somma;
- si ripete (i nodi nuovi partecipano come simboli) finché resta un solo nodo (la radice);
- si etichettano i due rami uscenti da ogni nodo con e e si leggono le parole dalla radice alle foglie.
È ottimo: ha la minima tra tutti i codici a prefisso e, per il teorema di Kraft-McMillan (ogni codice decodificabile ha lunghezze che ammettono anche un codice a prefisso), tra tutti i codici decodificabili.
Esempio (lo stesso di prima). Si uniscono (), poi (), poi (), infine ():
A 0,35 ─────────────────┐
D 0,13 ─┐ ├ 0,58 ─┐
E 0,10 ─┴ 0,23 ─────────┘ │
B 0,22 ─┐ ├ 1
C 0,20 ─┴ 0,42 ─────────────────┘Con al ramo di sopra e a quello di sotto in ogni unione una possibile scelta è (lo scambio degli 0/1 dà un altro codice equivalente).
Lunghezza media. Due modi equivalenti:
- bit;
- scorciatoia: è la somma delle probabilità dei nodi interni (le unioni): (ogni foglia contribuisce con la sua probabilità tante volte quanti sono i nodi che attraversa verso la radice, cioè la sua lunghezza).
Efficienza e rate. bit, quindi . Senza codifica servono bit per simbolo (, ): con simboli/s il rate nominale scende da a bit/s, vicino al rate di informazione bit/s.
Il codice di Huffman non è unico (le scelte a parità di probabilità danno alberi diversi e le etichette 0/1 si possono scambiare), ma è unica.
Esempio completo con otto simboli
Probabilità (somma 1; l'ultima si ricava da ), tema d'esame gennaio 2025 (Esercizio 2 · codice di Huffman a 8 livelli e verifica di Kraft-McMillan (tema d'esame gennaio 2025)). Unioni successive:
- (nodo );
- una coppia tra i tre da (per esempio , nodo );
- (nodo );
- (nodo );
- i quattro nodi/simboli da : due coppie ( e ), poi la radice.
Lunghezze: tre simboli da a bit; quelli da e a bit; quelli da e a bit. Somma dei nodi internii nodi ottenuti dalle fusioni, esclusi i simboli di partenza: bit. Con bit, (a lunghezza fissa 3 bit: ).
Codifica a lunghezza variabile e rate
Se è la frequenza dei simboli del quantizzatore, con Huffman si ha rate nominale (bit/s) rispetto a senza codifica. Un caso reale (quantizzatore a 8 livelli, probabilità , tema d'esame febbraio 2026): bit, Huffman con lunghezze ha bit (); a kHz il rate scende da a kbit/s, quasi il rate di informazione kbit/s.
Errori comuni
- Unire i due simboli più probabili invece dei due meno probabili.
- Dimenticare di rimettere in ordine i nodi nuovi con quelli rimasti prima di scegliere i due minimi.
- Calcolare senza pesare con le probabilità, o con la lunghezza di una singola parola.
- Pensare che il codice di Huffman sia unico, o che l'efficienzarapporto tra entropia e lunghezza media del codice possa superare 1.
- Confondere la lunghezza media (per parola) con il rate (per secondo): servono e il bit-rate.
Versione ripasso
- Ottimo: ; le due parole più lunghe differiscono solo nell'ultimo simbolo (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 →).
- Shannon-Fano (top-down): ordina, dividi in due gruppi di probabilità quasi uguale, ripeti; non sempre ottimo.
- Huffman (bottom-up): unisci i due meno probabili, ripeti fino alla radice; ottimo. Non unico, ma unica. Scorciatoia: somma delle probabilità dei nodi interni.
- Esempio : , , , ; senza codifica bit ( vs bit/s a 100 simboli/s).
- Otto simboli : lunghezze , , . Laplace a 8 livelli: , , kbit/s a 8 kHz.
- Errori tipici: unire i più probabili; non riordinare; .
Esercizi su questo argomento
- Esercizio 1 · quantizzatore uniforme di un segnale gaussiano, SNR ed entropia in uscita (tema d'esame gennaio 2025)
- Esercizio 2 · codice di Huffman a 8 livelli e verifica di Kraft-McMillan (tema d'esame gennaio 2025)
- Esercizio 3 · PSD con righe, filtro passa-basso e due quantizzatori per un segnale esponenziale (tema d'esame febbraio 2025)
- Esercizio 4 · quantizzatore a 6 livelli, bit aggiuntivi e codice non decodificabile (tema d'esame agosto 2025)
- Esercizio 5 · quantizzatore a 60 dB per un segnale laplaciano e codice di Huffman (tema d'esame febbraio 2026)
- Esercizio 6 · segnale esponenziale, entropie estreme e quantizzatore a 3 bit (temi d'esame giugno 2025 e giugno 2026)
- Esercizio 7 · segnale A sin(u) con u uniforme, scelta del quantizzatore ed entropia (tema d'esame giugno 2026)
- Esercizio 26 · entropia ed efficienza di una sorgente quaternaria e trasformazioni dei simboli (tema d'esame gennaio 2021)