Università di Napoli “Federico II”
- Corso di laurea in
Informatica
Corso di
METODI PER IL TRATTAMENTO NUMERICO DI DATI
MULTIMEDIALI
a.a.2003/04
seminario n.1
I codici di Huffman
Studenti:
Borrelli Antonio
50/445
Chierchia Eduardo 50/223
Introduzione
 David A. Huffman(1925-1999) è stato uno dei pionieri nel campo della
Computer Science
 Fornì significativi contributi in diversi ambiti di applicazione nella neonata
e inesplorata Scienza degli elaboratori (macchine a stati finiti, switching
circuit, signal models, compressione, …)
 Egli sviluppò il metodo che porta il suo nome quando era ancora studente
al MIT e lo pubblicò nel 1952 in un articolo intitolato “A Method for the
Construction of Minimum-Redundancy Codes”
 Tale articolo iniziava con il seguente sommario, nel quale sono
chiaramente dichiarate le esigenze che il metodo si propone di soddisfare e
le sue caratteristiche salienti :
“An optimum method of coding an ensamble of messages
consisting of a finite number of members is developed. A
minimum-redundancy code is one constructed in such a way
that the average number of coding digits per message is
minimized.”
Borrelli A. – Chierchia E.
2
Nozioni preliminari (1/3)
Un algoritmo di codifica è un algoritmo attraverso il quale si rappresenta
l’informazione originale per mezzo di un nuovo alfabeto di simboli
 Un algoritmo di codifica si dice di tipo lossless se non comporta nessuna
perdita dell’informazione originale
Un algoritmo di codifica deve essere sempre accompagnato da uno di
decodifica affinché si possa ripristinare l’informazione originale a partire
dall’alfabeto dei codici
 Un algoritmo di codifica associato ad un simmetrico algoritmo di
decodifica costituiscono un processo di codifica (codec)
 I processi di codifica devono essere tali da soddisfare differenti requisiti a
seconda del contesto nel quale sono inseriti , ad esempio:
 Basso costo computazionale del processo di codifica
 Basso costo computazionale del processo di decodifica
 Protezione dell’informazione
 Integrazione al canale di comunicazione
Borrelli A. – Chierchia E.
3
Nozioni preliminari (2/3)
 La codifica di Huffman viene utilizzata principalmente, ma non solo, come
tipologia di algoritmo associata ad una riduzione della quantità di
informazione da rappresentare, potenzialmente illimitata (compressione) in
presenza di un canale di comunicazione con ovvi limiti fisici.
 La codifica di Huffman appartiene alla classe delle codifiche dette
entropiche essendo di tipo statistico, cioè basandosi sulla considerazione
che le occorrenze di caratteri o gruppi di caratteri non sono sempre uguali. Si
codificano i simboli più frequenti con parole codice più corte.
Borrelli A. – Chierchia E.
4
Nozioni preliminari (3/3)
 Altre caratteristiche notevoli della Codifica di Huffman sono le seguenti :
 Ottimalità del codice
La lunghezza media delle parole codice prodotte è la più
bassa rispetto ad ogni altra tecnica statistica di
codifica. Ciò vuol dire che :
Sia H(K) la lunghezza media delle parole codice prodotte
dall’algoritmo di Huffman, non esiste nessun altro
algoritmo in grado di produrre un codice L tale che
L(K)< H(K)
 Univoca decodificabilità
Il processo di decodifica è unico ed immediato. Il codice
prodotto è prefisso ovvero nessuna parola del codice è il
prefisso di un’altra parola del codice stesso, es.:
• Codice Prefisso
• Codice Non Prefisso
A := {a,ba,bb}
A’:= {a,ab,bba}
Borrelli A. – Chierchia E.
5
La codifca di Huffman
 Attualmente i codici di Huffmann vengono adoperati come back-end di
altre tecniche di compressione più evolute e complesse quali ad esempio
JPEG
Data la sua natura statistica, risulta evidente che tale tecnica di codifica
risulterà tanto più efficiente quanto meno è uniforme la distribuzione delle
frequenze dei simboli nell’alfabeto sorgente
 La tecnica opera attraverso la creazione di alberi n-ari pesati sui simboli in
ingresso producendo in output un unico albero n-ario di codifica. L’ arietà
dell’albero è la cardinalità dell’ alfabeto di codice considerato
Un albero n-ario pesato è un albero nel quale :
 Ad ogni nodo è associato un peso
 Ogni nodo interno ha esattamente n figli
Questo particolare albero n-ario è tale che:
 Ogni nodo ha peso uguale alla somma dei pesi degli
n figli
 Quindi la radice ha come peso la somma dei pesi
delle foglie (1 se alla foglia si associa come peso
la
probabilità
di
occorrenza
del
simbolo
Borrelli A. – Chierchia E.
corrispondente)
6
L’ algoritmo (costruzione del codice)
 A partire dalla precedente descrizione di albero pesato n-ario analizziamo
i passi dell’algoritmo considerando alfabeti di codice (quindi alberi) binari:
Input :
 Alfabeto sorgente A di m simboli
 Frequenza di ogni simbolo dell’alfabeto A considerato
Output :
Codice Huffman H degli m simboli dell’alfabeto A in ingresso
Algoritmo :
 Si ordinano i simboli dell’alfabeto in ordine non crescente di
probabilità (o crescente di frequenza): si ottengono così n alberi
pesati
 Finché non si è ottenuto un unico albero allora
 Si selezionano sempre i due alberi A1 e A2 con peso più
basso
 Si genera un nuovo albero la cui radice ha peso pari alla
somma di A1 + A2
 Si assegna 0 ad ogni arco sottendente un figlio sinistro, 1
altrimenti ( non cambia nulla se si agisce inversamente )
Borrelli A. – Chierchia E.
7
I codici di Huffman : 1° esempio di esecuzione
 Consideriamo un semplice esempio per comprendere al meglio l’algoritmo precedentemente
esposto
 Supponiamo, per semplicità, di costruire sia l’alfabeto di simboli che le probabilità di
occorrenza sul seguente testo :
Si itera finché non si è
a albero
ll o
B
e
ll o
codifica
Testo:= “Ballo Bello”
ottenuto unB unico
 Alfabeto di input :
Σ:= { B ,a,l,o,e }
F(i)
i
B
2/10
a
1/10
l
4/10
o
2/10
e
1/10
Codice
00100001101 00100011101
Si assegna 0 ad ogni arco
sottendente un figlio sinistro,
1 altrimenti
10
Si
ordinano
i
simboli
Si0selezionano i due
dell’alfabeto
in
ordine
alberi
a ed e con peso più
crescente di frequenza:
si
6
basso : nuovo nodo radice
ottengono così n alberi
0
1 alla somma di
con peso pari
pesati
a + e
4
1
0
1
2
0
1
a
1
e
1
B
2
o
2
l
4
0000
0001
001
01
1
Borrelli A. – Chierchia E.
8
1° esempio di esecuzione : Tabella di Huffman
Alfabeto di input
Codice
B
001
a
0000
l
1
o
01
e
0001
Borrelli A. – Chierchia E.
9
I codici di Huffman : 2° esempio di esecuzione
 Un altro esempio interessante si può costruire quando la distribuzione delle occorrenze dei
simboli è abbastanza unfiorme : in tal caso i simboli avranno quasi tutti la stessa lunghezza,
dunque l’efficienza intesa come dimensione dell’ informazione codificata da trasmettere ne
risente
Testo:= “Oggi studio” codifica
 Alfabeto di input :
O g g i
S t u d i o
10010110111 00000101001111100
10
Σ:= { O ,g,i,s,t,u d }
i
F(i)
O
2/10
g
2/10
i
2/10
s
1/10
t
1/10
u
d
1/10
1/10
0
1
4
6
0
1
2
0
0
2
0
1
1
4
1
S
1
t
1
u
1
d
1
000
001
010
011
0
o
2
100
1
g
2
i
2
101
11
Codice
Borrelli A. – Chierchia E.
10
2° esempio di esecuzione : Tabella di Huffman
Alfabeto di input
o
g
i
s
t
u
d
Codice
100
101
11
000
001
010
011
Borrelli A. – Chierchia E.
11
I codici di Huffman : confronto tra i due esempi
“Ballo Bello” = 00100001101 00100011101
“Oggi studio” = 10010110111 0000010100111110
1. Esempio :
-
5 elementi codice generati : [001,0000,1,01,0001]
-
totale = 14 bits
-
Lunghezza media = 14 / 5
= 2,8 bits
2. Esempio :
- 7 elementi codice generati:[100,101,11,000,001,010,011]
-
totale = 20 bits
-
Lunghezza media = 20 / 7
= 2,86 bits
L’esempio illustra il fatto che la lunghezza media dei
simboli nell’alfabeto codice è maggiore per un alfabeto
sorgente avente distribuzione uniforme delle occorrenze e
minore per un alfabeto sorgente avente distribuzione non
Uniforme.
Borrelli A. – Chierchia E.
12
Bibliografia
 “Elements of Information Theory”,cap. 5,pp.92-101.
Thomas M.Cover, Joy A. Thomas
A Wiley – Interscience Publication,John Wiley & Sons,Inc
 A method for the construction of minimum redundancy codes
Huffman D.A.
In proceedings IRE,vol 40,1952, pp 1098-1101.
Borrelli A. – Chierchia E.
13