TD 2, Huffman Code

INF 563 Introduction to Information Theory

January 13, 2023


1  Huffman Code

Consider a source with 27 letters specified by the following probability distribution.
' ' 0.1834 'i' 0.0591 'r' 0.0555
'a' 0.0640 'j' 0.0023 's' 0.0697
'b' 0.0064 'k' 0.0001 't' 0.0572
'c' 0.0259 'l' 0.0465 'u' 0.0506
'd' 0.0260 'm' 0.0245 'v' 0.0100
'e' 0.1486 'n' 0.0623 'w' 0.0001
'f' 0.0078 'o' 0.0459 'x' 0.0031
'g' 0.0083 'p' 0.0256 'y' 0.0021
'h' 0.0061 'q' 0.0081 'z' 0.0008
which is implemented in the following Java classes : Source.java and Source_fr.java.

1.1  Preliminaries

Compute the entropy of this source.

1.2  Huffman Tree

Write a program Dico.java that builds the Huffman tree of this source by using for instance the java classes ArbreHuffman.java,Feuille.java and Noeud.java.

The Huffmann code f of the source X={a0,…,an−2,an−1} with the probability distribution (P(a0),…,P(an−1)) is defined by :
  1. when n=2, f(a0) = 0 and f(a1) = 1
  2. otherwise it is assumed without loss of generality that the least likely letters are given by a0 and a1, and a new source is considered Y={a2,…,an,b} of cardinality n−1 with probability distribution
    Q(ai) = P(ai) i = 2 … n−1
    Q(b) = P(a0)+P(a1)
    Let g() be a Huffman code for Y, we obtain
    f(ai) = g(ai) i = 2 … n−1
    f(a0) = g(b)||0
    f(a1) = g(b)||1
Print the list of codewords and the average code length. You should obtain something like
% java Dico
        111
a       1010
b       0010011
c       01001
d       01110
e       110
f       0111100
g       0111110
h       0010010
...

1.3  Encoder

Write a program which takes a file as argument and which returns the corresponding binary sequence which encodes the file with the Huffman code. The input file can be chosen to be an excerpt of Candide (the line feeds will be viewed as space characters).
% wc -m extrait.txt
     1831 extrait.txt
% java Coder extrait.txt > extrait.code
% wc -m extrait.code
     7315 extrait.code
The 1831 characters of the file extrait.txt are encoded by 7315 bits.

1.4  Decoder

Write a program which takes as argument a file containing only '0''s and '1's and which outputs the corresponding text file.
% java Decoder extrait.code
il y avait en vestphalie dans le chateau de monsieur le baron de thunder ten tronckh un jeune garcon a qui la nature avait donne les moeurs les plus douces sa physionomie annoncait son ame il avait le jugement assez droit avec l esprit le plus simple c est je crois pour cette raison qu on le nommait candide les anciens domestiques de la maison soupconnaient qu il etait fils de la soeur de monsieur le baron et d un bon et honnete gentilhomme du voisinage que cette demoiselle ne voulut jamais epouser parce qu il n avait pu prouver que soixante et onze quartiers et que le reste de son arbre genealogique avait ete perdu par l injure du temps monsieur le baron etait un des plus puissants seigneurs de la vestphalie car son chateau avait une porte et des fenetres sa grande salle meme etait ornee d une tapisserie tous les chiens de ses basses cours composaient une meute dans le besoin ses palefreniers etaient ses piqueurs le vicaire du village etait son grand aumonier ils l appelaient tous monseigneur et ils riaient quand il faisait des contes madame la baronne qui pesait environ trois cent cinquante livres s attirait par la une tres grande consideration et faisait les honneurs de la maison avec une dignite qui la rendait encore plus respectable sa fille cunegonde agee de dix sept ans etait haute en couleur fraiche grasse appetissante le fils du baron paraissait en tout digne de son pere le precepteur pangloss etait l oracle de la maison et le petit candide ecoutait ses lecons avec toute la bonne foi de son age et de son caractere pangloss enseignait la metaphysico theologo cosmolonigologie il prouvait admirablement qu il n y a point d effet sans cause et que dans ce meilleur des mondes possibles le chateau de monseigneur le baron etait le plus beau des chateaux et madame la meilleure des baronnes possibles

1.5  Switching to English

Still with 27 letters, a scene taken from Hamlet together with statistics for the English language. Measure the compressed sizes in all these cases. Conclusions ?

2  and beyond...

To go beyond sources with 27 letters, you can compute statistics for French texts, for instance Candide, Cyrano de Bergerac or other French texts. The statistics are obtained through the following program: Stat.java.

If you want to measure what is lost by the « memoryless » approximation, try gzip on the same files.
This document was translated from LATEX by HEVEA.