Professional Documents
Culture Documents
Structure de linformation
Cette liste est trs subjective et volontairement incomplte. Elle permet cependant de rendre
compte de lventail de matires touches par la notion de codage, qui nest pas donc pas uniquement synonyme de compression.
Dans le cadre de ce cours, nous introduirons quelques codes de reprsentation rpandus ainsi
que quelques techniques de compression.
1.1
1.1.1
Le code ASCII (American Standard Code for Information Interchange) est un code de 7 bits
(de donnes) et dun bit de parit par symbole. Il date de 1961, et fut cr par Bob Bemer. 128
(= 27 ) symboles peuvent donc tre cods. On y retrouve les lettres majuscules et minuscules,
les 10 chiffres, quelques symboles de ponctuation et des caractres de contrle.
1.1.2
EBCDIC
Il sagit dun mode de codage des caractres sur 8 bits cr par IBM lpoque des cartes
perfores. De nombreuses versions existent, bien souvent incompatibles entre elles, ce qui est en
partie la cause de son abandon. On lutilise encore de nos jours, mais presque essentiellement
pour des raisons de rtro-compatibilit.
Dumont Renaud
Structure de linformation
1.1.3
Dumont Renaud
Structure de linformation
1.1.4
Unicode
Ce projet fut initi en 1987 par Becker, Collins et Davis. Lobjectif tait alors de construire
un code universel sur 16 bits, permettant donc 65,536 (216 ) codes diffrents. En 1991 est fond
le consortium Unicode, comprenant des linguistes et autres spcialistes de nombreux horizons.
La norme Unicode est, en plus dun standard de codage de caractres, un immense rapport des
recherches mondiales sur les langues utilises et ayant t utilises travers le monde. Unicode
Structure de linformation
stend de 0 0x10FFFF. Un code sur 16 bits nest donc plus suffisant. Le codage sur 4 octets
permet la reprsentation de plus de 4 milliards de caractres (232 ).
On y retrouve le code ASCII, auquel on a notamment ajout les jeux complets de caractres
corens, japonais et chinois, mais aussi les symboles mathmatiques ou encore les critures anciennes telles que lcriture cuniforme ou le linaire B.
Plusieurs formats dencodage sont possibles (UTF - Universal Transformation Format) :
UTF-8 : 8 bits
UTF-16 : 16 bits
UTF-32 : 32 bits
Le standard Unicode dfinit les caractres comme une srie de points de code (codepoints).
Selon le format utilis, sa reprsentation sera diffrente.
1.1.4.1
UTF-8
Les codepoints encods sous ce format se prsentent comme un octet ou une suite doctets.
Lorsque le caractre se situe dans la plage 0x00 0x7F, il sagit du code ASCII, ce qui ne
pose pas de problme pour le reprsenter sur un seul octet. Pour les autres valeurs, un premier
octet (lead byte) suivi dun nombre variable doctets (trailing byte)(maximum 4 octets au total)
reprsentent conjointement la valeur encoder.
Dans le cas o on utilise un lead byte, celui devra toujours avoir son bit de poids fort 1,
et sera suivi dautant de bit 1 que de trailing byte.
Format du premier octet
110.....
1110....
11110...
Les bits remplacs par - dans le tableau ci-dessus reprsente les bits disponibles pour la
valeur Unicode encoder. Toutefois, chaque trailing byte doit avoir ses deux premiers bits 10.
Ainsi, chaque trailing byte possdera 6 bits dinformation.
Formats possibles
110..... 10......
1110.... 10...... 10......
11110... 10...... 10...... 10......
La limite de 21 bits est suffisante pour reprsenter lensemble des codepoints dfinis par
Unicode.
Par cette mthode dencodage, un mme caractre peut avoir plusieurs reprsentations. Par
exemple, le caractre / peut scrire
0x2F
0xC0 0xAF
0xE0 0x80 0xAF
Dumont Renaud
Structure de linformation
UTF-16
Les codepoints sont ici exprims sous la forme de mots de 16 bits. La plupart des caractres
courants sont reprsentables sur 16 bits, mais certains ne le sont toutefois pas (la plage adressable Unicode tant tendue jusque 0x10FFFF).
Similairement lUTF-8, il est possible dutiliser plusieurs mots (maximum 2) de 16 bits
afin dencoder des valeurs ncessitant plus de 16 bits.
Afin de dterminer les mots de 16 bits, on a recours au calcul suivant (U reprsente la valeur
Unicode) :
1. Si U < 0x10000, U est encod comme un entier non sign sur 16 bits.
2. Soit U = U - 0x10000. U tant infrieur ou gal 0x10FFFF (par dfinition de la plage
de validit du standard Unicode), U sera infrieur ou gal 0xFFFFF. 20 bits sont donc
ncessaires.
3. Initialiser 2 entiers non signs de 16 bits, W1 et W2, aux valeurs 0xD800 et 0xDC00.
Chaque entier possdera 10 bits libres, qui fourniront au total les 20 bits ncessaires.
4. Associer les 10 bits de poids forts de U aux bits libres de W1, et les 10 autres bits de U
(les 10 bits de poids faibles de U) W2.
Il ny ici quune seule manire de reprsenter un codepoint donn.
1.1.4.3
UTF-32
Les codepoints sont ici reprsents par une valeur sur 32 bits. Cette taille est suffisante pour
reprsenter tous les codepoints Unicode existants.
1.1.5
Base64
Largement utilis pour la transmission de messages, le codage Base64 utilise, comme son
nom le laisse prsager, un alphabet de 64 caractres. Un 65me caractre existe, mais ne fait
pas partie de lalphabet proprement parler. Il est utilis comme caractre final (=).
Le traitement sopre par groupe de 24 bits (3 octets) et produit en sortie un bloc de
4 caractres (4*6 bits). Chaque groupe de 6 bits sert dindex dans lalphabet Base64, et le
caractre associ est plac sur le flux de sortie.
Lorsque le nombre de bits en entre devient insuffisant (le flux dentre est compos de moins
de 24 bits), seules deux possibilits existent (en sachant que lentre ne peut tre constitue que
doctets entiers) :
lentre fournit 8 bits (1 octet) : le bloc de 4 caractres en sortie sera compos de 2
caractres de la table base64 suivis de 2 caractres finaux (cest--dire le 65me caractre).
lentre fournit 16 bits (2 octets) : le bloc de 4 caractres en sortie sera compos de 3
caractres de la table base64 suivis de 1 caractre final.
Dumont Renaud
Structure de linformation
Exemple Le mot oui est traduit sous forme binaire en 01101111 01110101 01101001. Si
on dcoupe ces 24 bits en blocs de 6 bits, il vient 011011 110111 010101 101001. Sous forme
dcimale, on obtient 27 55 21 41, et en substituant, il vient b3Vp.
Lorsquon utilise cet encodage dans le logiciel de chiffrement de messages PGP, le rsultat
est ensuite encod au format ASCII.
Retour lexemple Ainsi, si on met le bit de parit 0, la correspondance de b3Vp est
01100010 00110011 01010110 01110000.
1.2
La compression de donnes
La compression a pour but de rduire la longueur dune chane sans affecter son contenu
informatif. Cela permet la fois de rduire les exigences en mmoire et daugmenter la capacit
dun canal de transmission (thorie de Shannon).
Linformation dun message peut se dfinir comme la "surprise" cause par la connaissance
de ce message. Elle se calcule par la formule
log2 p
si p est la probabilit doccurrence du message. Par simplification dcriture, nous considrerons
prsent que tous les logarithmes seront en base 2.
Soit lensemble X compos de N messages dont les probabilits doccurrence sont donnes
par p1 , ..., pN . Alors
N
X
pi = 1
i=1
Dumont Renaud
Structure de linformation
N
X
pi log pi
i=1
1
N
pi qj log pi qj =
X
qj (log pi + log qj )
pi
pi log pi +
pi log pi +
qj log qj
qj log qj
H(X)
log d 6 1
L
Structure de linformation
1.2.1
Codages Statistiques
1.2.1.1
Codage de Huffman
Supposons avoir 8 messages m1 , ..., m8 dont la probabilit doccurrence est donne par p1 =
p2 = ... = p8 = 1/8. Il vient
H(X) =
8
X
1
1
pi log pi = 8. .3 = 3
8
,
,
,
,
,
,
,
{pi } =
2 2
2
2
2
2
2
2
alors H(X) = 127
64 et on obtient un codage non-redondant o L est infrieure 2 bits !
Ce codage a en plus le mrite de permettre le dcodage instantan (caractre par caractre,
sans attendre une squence entire). On parle de proprit prfixe : (aucun code nest prfixe
dun autre code).
Exemple :
1.9.
Dumont Renaud
Structure de linformation
10
3. Rpter le point 2 jusqu lobtention dune seule racine larbre (de poids
pi = 1)
Structure de linformation
11
canal).
1.2.1.2
Codage de Shannon-Fano
Ce procd est antrieur au codage de Huffman est se base galement sur un codage statistique.
Algorithme
1. Construire une table des frquences dapparition des symboles trie par ordre dcroissant.
2. Diviser cette table en deux parties. Celles-ci doivent avoir une somme de frquences gale
(ou pratiquement gale) celle de lautre.
3. Affecter le chiffre binaire 0 la moiti infrieure, la moiti suprieure prenant la valeur 1.
4. Rpter les oprations 2 et 3 aux deux parties, jusqu ce que chaque symbole ne reprsente
plus quune partie de la table.
Dumont Renaud
Structure de linformation
1.2.2
12
Le codage RLE (Run-Length Encoding) est, comme son nom lindique, un codage de "course",
cest--dire quil limine certaines squences de caractres en les remplaant par un code spcifique. Chaque "course" de k lments (2 < k 9) est remplace par un caractre non utilis
(ex : @) suivi de lentier k et du caractre substitu.
Exemple 1
Si tous les caractres sont utiliss, on en choisit un rarement utilis comme "indicateur" et on
le double quand on rencontre ce caractre rare. Ce principe est illustr dans lexemple ci-dessus.
On remarque galement que dans le cas prcis o on se met daccord pour ne remplacer que
les courses dun caractre donn, il nest pas ncessaire de fournir le caractre remplac. Ce type
dutilisation est frquent dans le cas des transmissions dimage en noir et blanc (type fax).
Exemple 2
Une condition est ncessaire pour que cette compression soit utile : la squence rpte doit
contenir au moins 4 lments pour obtenir un gain (3, dans le cas o on est daccord sur le
caractre remplac).
1.2.2.2
Il est facile de laisser tomber des champs entiers dun enregistrement. Prenons un enregistrement de 4 champs de 8 caractres (32 caractres) pour les noms alors que la longueur moyenne
est bien plus courte. On utilise alors la technique du bit-mapping.
Dumont Renaud
Structure de linformation
13
Le principe est dutiliser une bit-map devant chaque enregistrement pour indiquer la prsence
Recherche de pattern
Des tudes sur de nombreux textes anglais ont rvl que le nombre de mots distincts qui les
composent reprsente 10 15% du nombre total de mots utiliss dans ces textes. Si on ralise
la mme tude sur des textes issus de domaines spcialiss (articles scientifiques, documents
militaires ou mdicaux, ...), on saperoit que ce nombre de mots distincts reprsente un pourcentage encore plus petit. Autrement dit, les mots utiliss sont moins diversifis, ou encore, le
texte tudi est plus redondant. Ds lors, il serait intressant de remplacer des mots ou patterns pralablement choisis.
Cependant, le gain est limit par 2 observations :
les mots les plus courants sont courts (the, a, to, in, ...),
par loi de ZIPF : la frquence du nieme mot le plus courant est proportionnelle 1/n,
cest--dire que le gain augmente de plus en plus lentement quand on code de plus en plus
de mots.
Il existe tout de mme quelques pistes de solution :
on peut coder des "digrammes", cest--dire remplacer des paires de lettres par un seul
caractre. Ainsi, on pourrait remplacer les paires "ES", "TR", "LL",... par un caractre
propre. On obtient dans ce cas une compression denviron 50% en moyenne.
on peut aussi coder les "patterns" les plus courants : cette technique sutilise lorsque des
mots apparaissent frquemment (ex : vocabulaire informatique) mais
1. lanalyse pralable pour les dterminer est coteuse :
il faut tenir compte dun nombre lev de candidats, et
le choix dun pattern peut affecter lutilit des prcdents. Par exemple, si la squence ere est choisie puis galement here, there et where, si on commence
par remplacer les squences les plus longues, le codage de ere devient beaucoup
moins utile.
2. cela peut gner la recherche :
Par exemple, si ing l est cod par # et ing t par @, et si string est cod par
str# dans le contexte string lists et par str@ dans le contexte string trees. La
recherche de string conduit analyser plus dun pattern.
Dumont Renaud
Structure de linformation
1.2.3
14
Mme si, proprement parler, il sagit dun codage par substitution, nous allons leur consacrer une section part entire. Ces algorithmes consistent remplacer des squences (les facteurs) par un code plus court qui est lindice de ce facteur dans un dictionnaire.
1.2.3.1
Dans cette approche, le dictionnaire nest quune portion du texte encod prcdemment.
Lencodeur examine le texte compresser par lintermdiaire dune fentre glissante (sliding
windows).
Dumont Renaud
Structure de linformation
15
Pour le caractre suivant s dans le LaB, lencodeur dispose de deux possibilits (puisque
2 s sont prsents dans le SB). Le principe sera de trouver la plus longue sous-chaine de correspondance. Ici, elles sont de longueur quivalente (la plus grande sous-chaine correspondante
contient uniquement s dans les deux cas). Par simplification thorique dans le cadre de cette
introduction, nous considrerons que loccurence la plus gauche sera utilise. Le triplet rsultant sera donc (10,1,"t).
En ce qui concerne le dcodage, il suffit de regarder les valeurs des donnes du triplet, et le
texte peut tre reconstruit.
Au point de vue applicatif, les logiciels GZIP, PKZIP, etc. fonctionnent sur une variante du
LZ77, portant le nom de DEFLATE2 .
1.2.3.2
Dumont Renaud
Structure de linformation
16
1.2.3.3
LZW
La variante la plus populaire du LZ78 est lalgorithme LZW (Lempel, Ziv, Welch) cr en
1984. Le principe est de rduire lenvoi dinformations au dcodeur. Au lieu du couple <i,c>,
seul lindex <i> sera transmis.
Algorithme
On initialise la table (le dictionnaire) en y plaant les codes des caractres ASCII tendu,
On regarde le caractre transmettre :
1. sil existe dj dans la table, on regarde le caractre suivant,
2. si le groupe des deux existe galement, on regarde le suivant, etc.
Lorsquun nouveau groupe est dcouvert, on le dfinit en linsrant dans le dictionnaire.
Dans un premier temps, on transmet les codes des morceaux qui le composent. La prochaine fois quon le rencontrera, on transmettra son code propre. Les mots ajouts au
dictionnaire seront dtermins par lintermdiaire dune "fentre" voluant au fil de lanalyse du texte compresser. Ce concept est explicit dans lexemple ci-dessous.
On procde de la sorte jusqu la fin de la transmission.
Lorsque le dictionnaire est plein, soit on procde son extension, soit on se borne utiliser
les codes dj existants.
La base du dictionnaire repose sur les 256 caractres du code ASCII tendu. A la suite de
ceux-ci, on trouvera diffrents groupes de lettres rencontrs au fur et mesure de la compression
du texte.
Comment se construit le dictionnaire ?
Dumont Renaud
Structure de linformation
17
Le principe est dutiliser une fentre grandissant jusqu lobtention dun mot inexistant
dans le dictionnaire. Auquel cas le mot en question est ajout, le code du prfixe connu envoy,
et la fentre ramene au dernier caractre analys.
Pour plus de clart, soit lexemple suivant, sachant que les 256 premires entres du dictionnaire sont initialises avec les 256 valeurs du code ASCII tendu :
Imaginons le message "ma maison" a compress.
1. Le premier caractre a analys est "m". Il est dans le dictionnaire.
2. Le caractre suivant est concatn avec "m" et forme la chaine "ma". Elle nest pas
dans le dictionnaire : il faut donc lajouter. On lui affecte donc lentre 256 dans le
dictionnaire (on commence 0). On envoie la valeur correspondante "m"(109).
3. Un nouveau mot venant dtre ajout, on reprend alors au dernier caractre pris en
compte (ici "a"). Le caractre suivant est concatn et forme la chaine "a ". Elle nest
pas dans le dictionnaire : il faut donc lajouter. On lui affecte donc lentre 257 dans
le dictionnaire. On envoie la valeur correspondante "a"(97).
4. Un nouveau mot venant dtre ajout, on reprend alors au dernier caractre pris en
compte (ici " "). Le caractre suivant est concatn et forme la chaine " m". Elle
nest pas dans le dictionnaire : il faut donc lajouter. On lui affecte donc lentre 258
dans le dictionnaire. On envoie la valeur correspondante " "(32).
5. Un nouveau mot venant dtre ajout, on reprend alors au dernier caractre pris en
compte (ici "m"). Le caractre suivant est concatn et forme la chaine "ma". Cette
chaine est dj dans le dictionnaire. On concatne le caractre suivant et cela forme
la chaine "mai". Elle nest pas dans le dictionnaire : il faut donc lajouter. On lui
affecte donc lentre 259 dans le dictionnaire. On envoie donc la valeur correspondante
"ma"(256).
6. Un nouveau mot venant dtre ajout, on reprend alors au dernier caractre pris en
compte (ici "i"). Le caractre suivant est concatn et forme la chaine "is". Elle nest
pas dans le dictionnaire : il faut donc lajouter. On lui affecte donc lentre 260 dans
le dictionnaire. On envoie la valeur correspondante "i"(105).
7. Un nouveau mot venant dtre ajout, on reprend alors au dernier caractre pris en
compte (ici "s"). Le caractre suivant est concatn et forme la chaine "so". Elle nest
pas dans le dictionnaire : il faut donc lajouter. On lui affecte donc lentre 261 dans
le dictionnaire. On envoie la valeur correspondante "s"(115).
8. Un nouveau mot venant dtre ajout, on reprend alors au dernier caractre pris en
compte (ici "o"). Le caractre suivant est concatn et forme la chaine "on". Elle
nest pas dans le dictionnaire : il faut donc lajouter. On lui affecte donc lentre 262
dans le dictionnaire. On envoie la valeur correspondante "o"(111).
9. Un nouveau mot venant dtre ajout, on reprend alors au dernier caractre pris
en compte (ici "n"). Le caractre suivant est concatn et forme la chaine "n(eof)".
Elle nest pas dans le dictionnaire : il faut donc lajouter. Etant donn le caractre
spcifique de fin de fichier, il nest pas ajout au dictionnaire. On envoie la valeur
correspondante "n"(110).
Dumont Renaud
Structure de linformation
18
1.2.3.4
1.2.4
1.2.5
Il existe plusieurs manires de classer les formats de compression. En voici quelques exemples :
Par analyse statistique ou par substitution : Huffman VS LZW
Avec ou sans perte (= destructive ou non destructive) :
Avec perte : des dtails sont dtruits lors de la compression, et il est impossible de
les retrouver par la suite. On utilise les proprits de loreille et de loeil humain pour
supprimer les informations inutiles. Exemple : Jpeg
Sans perte : aucune perte et restitution parfaite aprs dcompression. Exemples : Huffman, RLE, Zip, ...
Symtrique ou asymtrique :
Symtrique : le temps de calcul ncessaire pour la compression ou la dcompression est
quivalent. Il sagit par exemple dalgorithmes de transmission de donnes.
3 M.Crochemore,
Dumont Renaud
Structure de linformation
19
Asymtrique : lune des deux phases est plus rapide que lautre, tels que les algorithmes
darchivage massif.
...
1.3
Ressources
Ressources bibliographiques :
Data compression, the complete reference, David Salomon, 2004, Springer.
Introduction to Data compression, Khalid Sayood, 2006, Morgan Kaufmann.
Illustrations :
Data Compression, the complete reference, David Salomon, 2004, Springer
Computer and Network Security, 3rd edition, W. Stallings, 2003, Prentice Hall
Wikipedia.org
Dumont Renaud