Sous-sections

2.6.1 Compression de données textuelles

La transmission d'un texte s'accommode mal d'erreurs et, pour ce type de signal, il n'est donc question que de codage sans perte.

Les techniques rencontrées dans les applications sont des variantes des trois techniques de codage suivantes:

Codage RLC
(Run Length Coding). Le principe employé pour ce codage est très simple: toute suite d'octets de même valeur est remplacée par la valeur, à laquelle on associe le nombre d'occurrences suivantes.
Codage de HUFFMAN.
Il s'agit d'une méthode de codage purement statistique consistant à coder les lettres suivant leur probabilité d'apparition. À la lettre la plus fréquente est associé le mot de code le plus court; le mot de code le plus long s'utilise pour la lettre la moins probable.
Codage LEMPEL, ZIV, WELCH (LZW).
Cette méthode consiste à remplacer les chaînes de caractères rencontrés précédemment par leur adresse dans une table au fur et à mesure du codage. Le récepteur procède de façon symétrique et reconstitue le dictionnaire par le même algorithme.

Cette méthode est utilisée par les logiciels de compression les plus courants tels que ARC ou PKzip.

Ces trois techniques ne sont pas réservées au seules données textuelles. La transmission d'un fax par exemple utilise la technique de codage RLC car les lignes contiennent de longues séries de pixels blancs.

2.6.1.1 Codage de HUFFMAN

Examinons le fonctionnement du codage de HUFFMAN.

La première étape de la méthode consiste à réorganiser les symboles par ordre de probabilité décroissante. Chaque symbole est alors associé à une feuille d'un arbre en construction. On relie ensuite les feuilles en créant un noeud auquel on associe la somme des probabilités des deux symboles correspondants. À chaque étape, on fusionne les 2 noeuds (ou feuilles) ayant les probabilités les plus faibles. On répète ce processus jusqu'à ce qu'il ne reste plus qu'un seul noeud dont la probabilité associée vaut 1.


Exemple. Considérons une source à 4 symboles A1A2A3A4 respectivement de probabilité p(A1) = 0, 5, p(A2) = 0, 25, P(A3) = 0, 125, p(A4) = 0, 125. Dans cet exemple, les symboles ont déjà été réorganisés par ordre décroissant de leur probabilité respective. L'arbre est construit comme indiqué à la figure 2.31.


Figure 2.31: Illustration de la méthode de HUFFMAN.
2401  

Une fois l'arbre construit, on associe à chaque branche de l'arbre un symbole 0 ou 1. Il suffit de redescendre l'arbre jusqu'aux symboles pour déterminer le code correspondant

A1 $\displaystyle \rightarrow$ 1  
A2 $\displaystyle \rightarrow$ 01  
A3 $\displaystyle \rightarrow$ 001  
A4 $\displaystyle \rightarrow$ 000  

Appelons l (Ai) le nombre de bits associé au symbole Ai. Dès lors, nous avons

l (A1) = 1  
l (A2) = 2  
l (A3) = 3  
l (A4) = 3  

Le nombre moyen de bits utilisés par symbole, M, est donné par

M = $\displaystyle \sum_{{i=1}}^{{4}}$p(Ai)l (Ai) = 1, 75 (2.14)

Or, l'entropie de la source est donnée par

H(X) = - $\displaystyle \sum_{{i=1}}^{{4}}$p(Ai)log2p(Ai) = 1, 75 (2.15)

Il vient donc que le code obtenu par la méthode de HUFFMAN est optimal. Il faut remarquer que l'association triviale (A1 = 00, A2 = 01, A3 = 10, A4 = 11) aurait fourni un code de 2 bits par symboles. L'exemple précédent pourrait faire croire que le code de HUFFMAN conduit toujours à M = H(X). Ce n'est certes pas le cas et, de plus, la solution n'est pas nécessaire unique. Ainsi, dans l'exemple précédent, on peut permuter les mots de code de A3 et A4 sans affecter la valeur de M.


Marc Van Droogenbroeck. Tous droits réservés.
2004-06-15