La compression de fichier

Lorsque des textes se retrouvent dans un dossier compressé (.zip; .rar; etc) c'est qu'il est compressé... mais qu'est ce qu'une compression ?

Le codage des caractères

Le texte d'origine est en cade ASCII sur un octet (8bits), il permet de coder les caractères américains. Tous les caractères sont codés sur le même nombre de bit. Pour compresser sans perdre d'information il faut coder les caractères sur un nombre de bit différent : plus la lettre est fréquente plus le nombre de bit nécessaire pour la coder sera petit.

Par exemple dans la phrase : "C'est un texte"; le e et le t apparaissent 3 fois, il est judicieux de les coder avec moins de bit suivant un arbre binaire. D'abord on fait des couples de lettre et leur fréquence puis on réalise l'arbre ( attention les racines sont en haut et les feuilles en bas.

Voici un exemple d'arbre binaire :

Avec cet arbre, le codage du "e" est 110 au lieu d'un octet !

Cependant, il faut enregistrer le code et l'arbre car il existe de nombreux arbres possibles pour un texte donné. On appelle cet algorithme un algorithme de Huffman.

Permutation circulaire de Burrows Wheeler

Une permutation circulaire consiste à déplacer la première lettre du texte à la fin.

tete_a_tete

ete_a_tetet

te_a_tetete

e_a_tetetet

_a_tetetete

a_tetetete_

_tetetete_a

tetetete_a_

etetete_a_t

tetete_a_te

etete_a_tet

Nous avons effectué toutes les permutations circulaires, il faut maintenant les classer par ordre alphabétique et relever la dernière lettre:

a_tetetete_

e_a_tetetet

ete_a_tetet

etete_a_tet

etetete_a_t

te_a_tetete

tete_a_tete

tetete_a_te

tetetete_a_

_a_tetetete

_tetetete_a

_

t

t

t

t

e

e

e

_

e

a

Après avoir réaliser toutes les permutations circulaires et avoir classé par ordre alphabétique, on relève la dernière lettre et la position du texte de départ (7eme ici). Souvent les lettres semblables se retrouvent associées comme ici

Le "move to front"

On suppose qu'après les modifications apportées avec Burrows Wheeler nous avons :

7,etttteeea

On associe chaque lettre avec son numéro dans l'ordre alphabétique avec a=0, b=1, ..., z=25.          Si une lettre est codée, elle devient première de l'alphabet et ainsi il ne faut que un 0 pour coder la prochaine lettre (si c'est la même). Ainsi avec notre code nous avons

e->4          t->19   t->0   t->0   t->0          e->1   e->0   e->0          a->2

Ce qui fait 4,19,0,0,0,1,0,0,2 après le move to front. On remarque que beaucoup de lettres seront codées avec un nombre de bit très petit ce qui permet une compression de fichier plus efficace.

Les 3 méthodes que nous avons vu sont associées pour créer des fichiers .zip ! On les utilise dans ces ordres :

Burrows Wheeler

Move to front

Huffman

Pour décoder on suit le chemin inverse.

Créez votre site web gratuitement ! Ce site internet a été réalisé avec Webnode. Créez le votre gratuitement aujourd'hui ! Commencer
Ce site utilise des cookies pour permettre le bon fonctionnement, la sécurité, et vous offrir la meilleure expérience utilisateur possible.

Paramètres avancés

Vous pouvez personnaliser vos préférences en matière de cookies ici. Activez ou désactivez les catégories suivantes et enregistrez votre sélection.