Algorithme de compression :
w = Nul; tant que (lecture d'un caractère c) faire si (wc existe dans le dictionnaire) alors w = wc; sinon ajouter wc au dictionnaire; écrire le code de w; w = c; fin si fin tant que écrire le code de w;
Algorithme de décompression :
lecture d'un caractère c; écrire c; // ajout suite à un oubli w = c; tant que (lecture d'un caractère c) faire si (c > 255 && l'index c existe dans le dictionnaire) faire entrée = l'entrée du dictionnaire de c; sinon si (c > 255 && l'index c n'existe pas dans le dictionnaire) faire entrée = w + w[0]; sinon entrée = c; fin si; écrire entrée; ajouter w+entrée[0] au dictionnaire; w = entrée; fin tant que;
L'algorithme général est le suivant :
Notons que les codes binaires sont au début généralement émis sur 8 bits, jusqu'à ce que ces 8 bits ne suffisent plus à coder l'indice que l'on désire(par exemple l'indice 256, qu'il est nécessaire de coder sur 9 bits). On émet alors l'indice 0 pour signifier que l'on augmente le nombre de bits émis de 1.
Prenons un exemple : supposons que la phrase à coder soit « repetition ». À chaque lettre est associé son code ASCII. Le dictionnaire est initialisé et associe l'indice 1 au code '0', l'indice 2 au code '1' ... etc. jusqu'à l'indice 256 qui correspond au code '255'.
Étape | Tampon | Émis | Rajout au dictionnaire |
---|---|---|---|
1 | '114'+'101' (re) | '115' (r) | 257 : '114'+'101' (r-e) |
2 | '101'+'112' (ep) | '102' (e) | 258 : '101'+'112' (e-p) |
3 | '112'+'101' (pe) | '113' (p) | 259 : '112'+'101' (p-e) |
4 | '101'+'116' (et) | '102' (e) | 260 : '101'+'116' (e-t) |
5 | '116'+'105' (ti) | '117' (t) | 261 : '116'+'105' (t-i) |
6 | '105'+'116' (it) | '106' (i) | 262 : '105'+'116' (i-t) |
7 | '116'+'105' (ti) = '261' | '0' (besoin d'un bit supplémentaire) | Aucun ajout |
8 | '261'+'111' (tio) | '261' (ti) | 263 : '261'+'111' (ti-o) |
9 | '111'+'110' (on) | '112' (o) | 264 : '111'+'110' (o-n) |
10 | '110' (n) | '111' (n) | Pas d'ajout |