Introduction

publicité
Projet d’algorithmique
Master 2 ISV
2005-2006
Par Sébastien Vaie
Projet d’algorithmique
Compression de données
Rapport
Introduction ............................................................................................................................. 4
RLE ou Run Lenght Encoding ............................................................................................... 5
Introduction ......................................................................................................................... 5
Principe ................................................................................................................................. 5
Exemple :............................................................................................................................ 6
Performances et limitations ............................................................................................... 6
Exemple :............................................................................................................................ 6
Variantes ............................................................................................................................... 7
Conclusion RLE ................................................................................................................... 7
LZW ou Lempel-Ziv-Welch .................................................................................................... 8
Introduction ......................................................................................................................... 8
Principe ................................................................................................................................. 8
Exemple :............................................................................................................................ 9
Performances et limitations ............................................................................................... 9
Variantes ............................................................................................................................. 10
Conclusion .......................................................................................................................... 10
Huffman ou statistique ......................................................................................................... 11
Introduction ....................................................................................................................... 11
Principe ............................................................................................................................... 11
Exemple :.......................................................................................................................... 12
Exemple 2 :....................................................................................................................... 13
Performances et limitations ............................................................................................. 13
Variantes ............................................................................................................................. 14
Exemple :.......................................................................................................................... 15
Conclusion .............................................................................................................................. 16
Référence ............................................................................................................................ 17
Sébastien Vaie
2005-2006
page 3
Projet d’algorithmique
Compression de données
Rapport
Introduction
L’augmentation de la taille des données à stocker et les limitations matérielles de
l’informatique ainsi que la démocratisation des transferts d’informations via les voies
téléphoniques a forcé l’apparition de la compression.
Afin de permettre le transfert de manière plus rapide sur les réseaux de l’information ainsi
que le stockage plus important de données sur un même espace.
La compression de données est comme son nom l’indique le fait de compacter des données
afin qu’elles prennent moins de place. Ainsi, elles peuvent être transférées via le réseau plus
facilement.
Elle est utilisée dans tous les domaines qui sont en rapport de proche ou de loin avec
l’informatique que ce soit la photo, la vidéo, le son, les programmes….
Elle comprend 2 grandes classes que l’on nomme la compression sans perte, qui ne détruit
aucune donnée, et la compression avec perte qui permet la suppression de données qui sont
moins importantes, ou comme pour les données destinées à une appréciation humaine qui
peuvent être limitées par la perception humaine.
Nous n’allons parler que des algorithmes de compression de données sans perte et plus
précisément des 3 types d’algorithme les plus utilisés à savoir RLE, LZW, et hauffman.
Sébastien Vaie
2005-2006
page 4
Projet d’algorithmique
Compression de données
Rapport
RLE ou Run Lenght Encoding
Introduction
Le RLE est l’un des algorithmes de compression les plus anciens, il a été fait pour compresser
tous types de données sans tenir compte de ce denier.
Il est très utilisé car est relativement simple à implémenter.
En contrepartie, le contenu de ces données va conditionner l’efficacité de la compression.
En effet, cet algorithme fonctionne de telle manière qu’il va supprimer les redondances
continues de bytes.
Donc pour des données qui ont de nombreuses suites de bytes identiques la compression sera
optimale mais pour des données de type texte où il y a peu de répétition continue du même
caractère, il sera nettement moins performant.
Principe
Son principe est relativement simple. Il va parcourir le fichier en regardant les caractères un
par un, si le suivant est le même il passe dans une boucle jusqu’à ce qu’il soit différent en
même temps dans cette boucle pour chaque caractère identique il incrémente un compteur.
Une fois sorti de cette boucle, il retourne en arrière du nombre de ce compteur, il remplace le
premier caractère par un identificateur de compression, le deuxième par le compteur et le
troisième par le caractère répété. Ensuite, il supprime les caractères répétés en plus (compteur
– 3).
Il est généralement prévu de mettre une contrainte sur les répétitions. En effet, l’algorithme ne
va pas compresser des caractères qui ne sont répétés que 2 fois car cela augmenterait la taille
de la chaîne de caractère.
S’il y a une répétition de 2 caractères par la compression elle sera remplacée par 3 caractères
ce qui fait un caractère de plus et donc cela sera sous performant.
Sébastien Vaie
2005-2006
page 5
Projet d’algorithmique
Compression de données
Rapport
Exemple :
Chaîne à compresser :
AAAAARRRRRROLLLLBBBBBUUTTTTTT
On choisit comme caractère spécial : @ et comme seuil de répétition : 3
Après compression : @5A@6RO@4L@5BUU@6T
Gain : 11 caractères soit 38%,
Ce qui fait un gain relativement faible.
Performances et limitations
On peut donc dire que cet algorithme est relativement simple. En effet, puisque de manière
générale il consiste en une simple boucle. Il est donc relativement aisé de le programmer.
Il est également relativement simple à comprendre, il a également l’avantage qu’il peut coder
n’importe quel type de données.
Ce sont là ses points forts.
Il a généralement un taux de compression d’environ 40% selon le type de données.
Nous avons vu précédemment que le RLE pouvait compresser n’importe quel type de
données. Il y a tout de même une limitation sur ce point qui n’est pas de l’ordre de
l’algorithme mais surtout de l’efficacité. En effet, étant basé sur la répétition de caractères ou
de bytes, le type de données modifiera considérablement le taux de compression.
Car si les données à compresser ne présentent pas de répétition le fichier de sortie sera plus
gros que l’original ce qui est donc problématique pour un système de compression.
Ceci peut arriver avec des données de type texte ASCII.
Exemple :
Cannibalisation => 15 caractères
Après le codage RLE :
1C1a2n1i1b1a1l1i1s1a1t1i1o1n => 28 caractères
Ce qui nous donne un fichier de sortie de quasiment le double. Donc, le type de données ne
conditionnera pas le succès ou l’échec de l’exécution de l’algorithme mais conditionnera
plutôt le taux de compression.
En revanche, il pourrait très bien marcher sur des types de données biologiques notamment
les fichiers de génome qui sont représentés sous forme de texte mais dont leurs structures
peuvent représenter beaucoup de répétition.
Mais pour pallier un minimum à ces problèmes, il existe plusieurs variantes du RLE.
Sébastien Vaie
2005-2006
page 6
Projet d’algorithmique
Compression de données
Rapport
Variantes
Il a donc été imaginé des méthodes de parcours différentes afin de pouvoir en quelque sorte
augmenter le nombre de répétitions.
En effet, au lieu de parcourir le fichier de gauche à droite les variantes peuvent le parcourir en
colonne ou encore en ligne mais en prenant 4 bytes par 4 bytes à la place de toute ligne ou
encore en zigzag ces différents types de parcours peuvent considérablement augmenter le taux
de compression sur des types de données où la méthode standard est inefficace.
Si on prend l’exemple d’un texte en français on a beaucoup plus de chance d’avoir des
répétitions de caractères identiques en colonne que dans le sens de lecture.
Figure 1- variantes de parcours
Conclusion RLE
On peut dire que cet algorithme est facile à comprendre et à utiliser et qu’il marche très bien
sur certain type de données : tel que les images synthétiques, fichiers binaires, etc.
Mais cette simplicité a un prix à savoir : l’utilisateur doit connaître le type de données qu’il va
compresser sinon il risque d’avoir la mauvaise surprise que le résultat de sa compression
prenne plus de place que l’originale et on peut imaginer que sur des systèmes critiques cela
peut poser de gros problème.
Sébastien Vaie
2005-2006
page 7
Projet d’algorithmique
Compression de données
Rapport
LZW ou Lempel-Ziv-Welch
Introduction
On a pu remarquer que la principale orientation de recherche de codage sur les fichiers pour
les compresser était axée en majorité sur les répétitions.
Que ce soit les compressions avec ou sans perte. Le LZW ne déroge donc pas à cette règle.
Il a donc pour but de trouver, de coder et de remplacer ces dernières. Cet algorithme est dit
adaptatif car il n’est pas possible de connaître la taille du fichier de sortie.
Car il est basé sur un système de dictionnaire que est modifié tout au long du codage du
fichier.
L’idée est qu’il est possible de coder une chaîne de caractères en formant systématiquement
une nouvelle chaîne de caractères basée sur celle déjà rencontrée plus le nouveau caractère.
Ces chaînes sont stockées et dans le fichier nous n’avons plus que l’adresse de la chaîne dans
le dictionnaire.
Cet algorithme est une modification de l’algorithme LZ 78.
Principe
La différence principale entre les méthodes LZ77 et 78 est l’implémentation initiale, dans le
dictionnaire, d’une table comprenant 256 « phrases » initiale d’un caractère chacune ce qui
augmente l’efficacité de la compression.
Cet algorithme va donc fonctionner de la manière suivante:
Il va lire le ficher et dès qu’il va rencontrer un « mot » qu’il ne connaît pas il va créer une
nouvelle entrée dans le dictionnaire. Lorsqu’il va rencontrer une suite de caractères qu’il a
déjà rencontré il va la parcourir jusqu’à la fin de cette « répétition ». Ainsi, quand un des
caractères sera différent, il va remplacer la partie qu’il connaît déjà par la référence et ajouter
à la fin le caractère en plus et entre ce nouveau mot dans le dictionnaire donc de proche en
proche l’algorithme va apprendre de plus en plus de mot et sera de plus en plus performant.
aaababbbaaabaaaaaaabaabb
Division
: |a|aa|b|ab|bb|aaa|ba|aaaa|aab|aabb
index
01 2 3 4 5
6
7
8
9
10
Codage
0a|1a|0b|1b|3b|2a|3a| 6a | 2b | 9b
Figure 2 LZ W Mais commencant par le mot vide (LZ78)
Sébastien Vaie
2005-2006
page 8
Projet d’algorithmique
Compression de données
Rapport
Exemple :
Chaîne à coder: /WED/WE/WEE/WEB/WET
Caractère lu
/W
E
D
/
WE
/
WEE
/
WEB
/
WET
Code ressorti
/
W
E
D
256
E
260
261
257
B
260
Nouveau code
256
257
258
259
260
261
262
263
264
265
266
/W
WE
ED
/D
/WE
E/
/WEE
E/W
WEB
B/
/WET
Chaîne compressée ou encodée: /WED 256 257 256 260 261 257 B 260 T
On dit donc de cet algorithme qu’il est adaptatif car il créé son dictionnaire au fur et à mesure
de l’encodage du fichier.
De plus, avec le fait le dictionnaire contient d’office les 256 chaînes les plus courtes cela évite
d’avoir besoin de donner le dictionnaire avec le fichier compressé car lors de la
décompression il aura la table initiale et donc comme les entrées se font en même temps que
la lecture l’ordre d’entrée permettra lors de la décompression de pouvoir « reconstruire le
dictionnaire » afin de retrouver le fichier originale.
Performances et limitations
Ce type de compression est relativement performant. En effet, cet algorithme a un taux de
compression minimum proche du maximum des algorithmes de type RLE (40%) pour arriver,
selon le type de données et le type de fichiers, à près de 50% de compression ce qui est très
acceptable pour de la compression sans perte.
Les performances sont d’autant plus acceptables si le fichier à compresser a une certaine
taille.
Effectivement, le fait que le dictionnaire se fasse au fur et à mesure implique une certaine
longueur.
La dernière amélioration apporter par Welsh permet de ne plus avoir besoin de fournir le
dictionnaire pour la décompression.
On sait également que ce type de compression n’est pas très performant sur les images de type
photographique car il y a peu de succession de même enchaînement de pixel.
Sébastien Vaie
2005-2006
page 9
Projet d’algorithmique
Compression de données
Rapport
La deuxième limitation est plutôt d’ordre technique. Ce type d’algorithme est un peu plus
compliqué à implémenter dû au mouvement de pointeur sur les fichiers.
Et la dernière limitation est plus d’ordre légal. Ces algorithmes sont sous couvert de 2 brevets
et donc ne sont pas libres de droit
Variantes
Il existe plusieurs variantes du LZW qui s’attaquent toutes plus ou moins au point faible de
cet algorithme.
Il est nécessaire que le fichier ait une certaine taille afin que l’algorithme soit optimal.
La taille des identifiants du dictionnaire varie de 9 à 15 bites.
La variante PKZIP va faire en sorte de redimensionner la taille de l’identifiant de sortie pour
qu’il ne dépasse pas une certaine taille quand le dictionnaire prend de l’ampleur.
La variante LZMW construit des phrases en concaténant 2 phrases ensemble plutôt qu’en
concaténant une phrase avec le prochain caractère des données. Ce qui implique un
dictionnaire plus complexe. Mais donne une progression plus rapide du dictionnaire et donc
peut permettre de compresser des fichiers de plus petites tailles.
Conclusion
En conclusion, on a pu voir que cet algorithme est relativement performant pour presque tous
les types de données et que son taux de compression est proche des 50%.
Il va plus loin que les autres algorithmes à base de dictionnaire car il n’est pas nécessaire de
fournir celui-ci pour la décompression.
Sébastien Vaie
2005-2006
page 10
Projet d’algorithmique
Compression de données
Rapport
Huffman ou statistique
Introduction
Le codage de Huffman a pour but de transformer une suite de caractères en suite de 0 et de 1
(préfixe) qui sont tous différents. De manière à ce que le code d’un caractère ne soit pas le
préfixe d’un autre
Exemple : 110 et 1101 problème de différenciation car 110 est contenu dans 1101 et
donc lors de la décompression le système ne saurait pas de quel caractère il s’agit.
La compression va donc se faire par transformation des caractères et non plus par réduction
des occurrences (RLE ou LZW).
Il va diminuer le nombre de bits occupés par les caractères qui ont une fréquence d’apparition
élevée et augmenter celle des caractères qui ont une fréquence basse.
Pour générer le code de chaque lettre cet algorithme va donc utiliser un arbre binaire.
Principe
Son principe est relativement simple. L’algorithme va parcourir tout le fichier à compresser et
il va calculer la fréquence d’apparition de chaque caractère. Il les classe en fonction de cette
fréquence de manière décroissante.
Ensuite, pour chaque caractère il créé un arbre (une feuille), donc tant que le nombre d’arbre
est supérieur à 1, il va fusionner les arbres qui ont la plus petite fréquence.
Figure 3-exemple de codage Huffman
Sébastien Vaie
2005-2006
page 11
Projet d’algorithmique
Compression de données
Rapport
Dans le nœud ainsi créé il va mettre la somme des fréquences des feuilles ainsi que la
concaténation des 2 caractères des feuilles.
Une fois qu’il ne reste plus qu’un arbre il va associer chaque branche issu de chaque noeud
avec la valeur de 0 ou 1.
Si cette branche est GAUCHE elle aura comme valeur 0 sinon elle aura 1. Donc en partant de
la racine on peut trouver le code de chaque caractère en étant assuré de l’unicité de celui-ci.
Car par définition un arbre de Huffman est un arbre qui minimise :
Σ f(i)D(i)
De toute les feuilles i ou f() est la fréquence et D() la distance de la racine à la feuille i.
Exemple :
Texte : axabataaxbc
1
011
A5
010
X2
001
000
B2
T1
C1
0
1
Calculs des fréquences :
1
A→5
X→2
B→2
T→1
C→1
4
XB
0
2
TC
1
0
1
6
XBTC
0
11
AXBTC
Résultat du codage : 1
Sébastien Vaie
2005-2006
001 1 010 1 001 1 1 011 010 000
page 12
Projet d’algorithmique
Compression de données
Rapport
Exemple 2 :
Résultat :
101010000111111110110111011000001101001100110111001000011100101100010111110
00011110100 ;
Performances et limitations
Au niveau des performances cet algorithme est proche du RLE: il compresse de 40% à 50%
en moyenne, mais est applicable à quasiment tous les type de données (aussi bien texte que
image) car il ne se base pas sur les répétitions successives de caractères. Donc on peut dire
qu’il est relativement performant.
En effet, pour trouver le code d’un caractère, il suffit de descendre l’arbre jusqu’à ce
caractère.
Le processus est relativement rapide et n’engendre pas de perte d’espace (problème du RLE).
On peut également remarquer qu’à certaine étape il peut y avoir 2 regroupements de même
fréquence. Cela ne pose pas de problème car l’algorithme les traitera dans l’ordre qu’il veut
donc le codage sera différent mais l’efficacité sera la même. Il suffit juste que lors de la
décompression l’algorithme ait le bon arbre.
Le problème principale est qu’il faut transmettre la table ou l’arbre avec le fichier compressé
et donc cela fait considérablement baisser l’efficacité de la compression.
En effet, la table de fréquence va grossir en fonction de la compression mais elle a l’avantage
de ne pas pouvoir grossir indéfiniment en effet elle ne contient au maximum que 256
caractères (dans le cas des textes).
Sébastien Vaie
2005-2006
page 13
Projet d’algorithmique
Compression de données
Rapport
Mais il peut arriver que la somme du fichier compressé plus la table de fréquence soit de taille
plus importante que le fichier non compressé.
Donc on peut affirmer tout comme le LZW que le codage de Huffman est plus performant sur
de grand fichier. Rapport taille de fichier, taille de fichier compressé, taille de la table de
fréquence.
Une autre limitation est que l’algorithme est extrêmement sensible à la perte d’un bit car cela
peut complètement changer le fichier de sortie après décompression car le code ne sera plus
valide.
Variantes
Comme toujours les variations d’algorithmes, basent leurs actions sur leurs défauts principaux
des algorithmes dont ils sont issus. Pour Huffman le principal problème est la transmission de
la table de fréquence ou de l’arbre.
Donc pour palier à ce problème il existe des formes adaptatives de l’algorithme de Huffman:
C’est-à-dire des formes qui créées leurs arbres au fur et à mesure de la compression et de la
décompression.
En effet, il part d’un arbre quasiment vide à l’exception de deux symboles qui sont <NEW>et
<EOF> qui sont pondérés d’une fréquence de 1.
Le symbole new permet l’addition de nouveau caractère dans l’arbre quand l’algorithme en
rencontre. S’il rencontre un caractère qui est déjà présent dans l’arbre les règles strictes
d’addition et de déplacement des arbres binaires équilibrés évitent d’avoir à reconstruire tout
l’arbre.
Donc l’arbre va ainsi pouvoir être créé au fur et à mesure de la compression ou de la
décompression. Ce qui évite de devoir fournir la table de fréquence et ce qui augmente
sensiblement la performance de la compression.
Ainsi cette forme palie aux principaux désavantages de type d’algorithme.
Sébastien Vaie
2005-2006
page 14
Projet d’algorithmique
Compression de données
Rapport
Exemple :
Codage de la chaîne BAN
Insertion de B
Insertion de A
Ainsi, après 3 itérations on
obtient le codage désiré.
On peut remarquer que lors de
l’insertion de nouveau
caractère le code change.
Ce type de compression
permet un gain au niveau de la
compression mais est un peu
plus lent que la forme
statique.
En effet, étant généralement
par récurrence, il demande un
peu plus de temps machine
Sébastien Vaie
2005-2006
page 15
Projet d’algorithmique
Compression de données
Rapport
Conclusion
En conclusion générale, on peut dire que les compressions sans perte ont un taux de
compression maximum proche de 50%.
On a pu voir également que ces algorithmes sont capables de traiter tous les types de données
mais que les performances y étaient directement liées.
A l’exception des algorithmes de type statistique (Huffman).
Le principe des autres algorithmes est toujours sensiblement le même : il se base sur la
suppression de répétition.
On a pu voir également que la taille des fichiers à compresser influençait beaucoup les
performances.
Donc la chose primordiale avant d’utiliser un algorithme de compression c’est de connaître le
type de données ainsi que leurs tailles.
En résumé on peut dire que le RLE est parfait pour des fichiers de taille importante et ayant
un grand nombre de répétitions successives tel que les fichiers de génome.
Mais est très peu performant sur les données de type texte ou image photographique.
Le Huffman est quant à lui parfait pour tous types de données même s’il est influencé par la
taille de ces dernières. Il est plus efficace sur les gros fichiers dus à la présence de sa table de
fréquence (voir Huffman adaptatif). Donc il est parfait pour les textes et les images de taille
suffisante.
Et en dernier le LZW est certainement le plus performant car il a des limitations mais elles
influent moins sur les taux de compression.
Parfait pour quasiment tous types de données, moins performant sur les images.
Le seul problème est qu’il n’est pas libre de droit.
Enfin, on peut dire que selon le type de données que l'on a traité il est facile de faire le bon
choix et de ne pas utiliser des algorithmes très compliqués pour des types de données qui
pourraient être compressés par des algorithmes relativement simples (RLE).
Ne pas utiliser l’artillerie lourde pour écraser un moustique.
Sébastien Vaie
2005-2006
page 16
Projet d’algorithmique
Compression de données
Rapport
Référence


section 6.1 de Folk, Zoellick & Riccardi, File Structures, An Object-Oriented
Approach with C++
Compression de Données Sans Pertes, MM. S.Maadi, Y. Peneveyre, et
C. Lambercy

TIPE sur la compression de données informatiques, BENOIT Christophe
DUSSON Alexandre

Introduction à l’alguorithmique,
Sébastien Vaie
2005-2006
page 17
Téléchargement