Title: Gestion de Fichiers
1Gestion de Fichiers
- GF-7 Compression des Donnees
- (Base sur la section 6.1 de Folk, Zoellick
Riccardi, File Structures, An Object-Oriented
Approach with C ainsi que sur les notes du
cours 308-251 de McGill, donne en 1997)
2Resume du Cours de cette Semaine
- Une vue generale sur la compression des donnees
- Compression des redondances
- Utilisation dune notation differente
- Suppression de repetition de sequences
- Affectation de codes a longueur variable
- Encodage Huffman (pack et unpack en Unix)
- Encodage Lempel-Ziv (compress et uncompress en
Unix) - Techniques de compression irreversible
3Vue Generale sur la Compression des Donnees
- La compression des donnees consiste a coder les
informations dun fichier de facon a reduire leur
taille. - Question Pourquoi reduire la taille de fichiers?
- Reponse
- Afin dutiliser moins de storage, c.a.d., reduire
le cout, - Afin de rendre la transmission plus efficace ou
bien en diminuant le temps dacces ou en
utilisant le meme temps dacces mais avec un
bandwith plus petit et moins cher. - Afin de traiter le fichier de facon sequentielle
plus rapidement.
4Compression des Redondances I Utilisation dune
notation differente
- Dans notre discussion sur les enregistrements de
personnes, on a cree un champ specifiant letat
dans lequel la personne reside. Les etats (aux
US) sont specifies en utilisant 2 lettres de
lalphabet. E.g., OK pour Oklahoma. On a donc
reserve 2 octets pour ce champs. - Question Cela etait-il vraiement necessaire?
- Reponse Non Puisquil ny a que 50 etats, on
peut tous les encoder avec 6 bits, et
sauvegarder, ainsi, un octet par champ specifiant
letat. - Quels sont les desavantages de cette solution?
5Compression des Redondances I Utilisation dune
notation differente
- Desavantages
- Les codes ne sont pas comprehensible
- Il y a un cout associe a lencodage et au
decodage (le traitement des fichiers prend plus
de temps) - La complexite du Logiciel est accrue car il est
desormais necessaire davoir un module dencodage
et de decodage.
6Compression des Redondances II
Suppression de repetition de Sequences
- Lorsque les donnees sont representees dans un
tableau tres epars, on peut utiliser un mode de
compression appele run-length encoding. - Procedure
- Lire le tableau sequentiellement.
- Si une valeur apparait plus dune fois en
succession, remplacer la repetition par - Un indicateur de repetition special,
- La valeur repetee, et
- Le nombre de fois quelle est repetee.
- Il nest pas garantit que de lespace sera
effectivement gagne!
7Codage Huffman
- Veuillez supposer que tous les messages envoyes
dune source a une destination contiennent les
lettres a, b, c, d et e representees par les
probabilites .05, .2, .4, .17 et .18,
respectivement. - Notre but est dencoder chaque caractere en une
sequence de 1s et 0s de maniere a ce quaucun
code representant un caractere ne represente le
prefix dun autre. Example on ne peut pas avoir
les codes 110 et 1101 car 110 est un prefix
de 1101. Pourquoi?
8Solution Arbre Huffman suivi du Codage
Code a 100 b 111 c 0 d101 e110
9Definitions et Proprietes des Arbres Huffmans
- Definition Un arbre Huffman est un arbre binaire
qui minimise la somme des f(i)D(i) de toutes les
feuilles i, ou f(i) est la probabilite de la
feuille i et D(i) est la longueur du chemin
allant de la racine de larbre a la feuille i. - Proprietes
- chaque node interne a deux enfants
- Les elements ayant les probabilite les plus
petites sont les elements places le plus loin de
la racine, - Les elements ayant les 2 probabilites les plus
petites sont frere et soeur.
10Algorithme Hu-Tucker pour construire un arbre
Huffman I
- Soit un heap compose delements,elem, du type
suivant
11Revisions sur les (min) Heaps (voir livre
pp.312-318)
- Revisions Un heap est un arbre binaire aux 3
proprietes suivantes - Chaque noeud a une seule cle, et cette cle est
plus large ou egale a la cle de son parent. - Larbre est complet, ce qui veut dire que toutes
ses feuilles se trouvent sur deux niveaux au plus
et que toutes les cles du niveau inferieur sont
sur la gauche. - Le heap peut etre mis en storage dans un tableau
de facon a ce que la racine soit sauvegarde a la
position 1 et que les enfants du noeud a la
position i soient sauvegardes aux positions 2i et
2i1. Inversement, lindex du parent du noeud j
est floor(j/2).
12Revisions sur les (min) Heaps Insert (voir livre
pp.312-318)
13Revisions sur les (min) Heaps Remove (voir livre
pp.312-318)
14Algorithme Hu-Tucker pour construire un arbre
Huffman II
- Former un Heap a partir des lettres de lalphabet
et de leures probabilites (a, fa), (b, fb),. - For i n1 to 2n 1 do
- New(Elem(i))
- Elem(i). left ? Remove(Heap)
- Elem(i). right ? Remove(Heap)
- fi ? fleft fright
- Insert ( Elem(i, fi ), Heap )
- Return
15Autres Proprietes des Codes Huffman
- Les Codes Huffmans donnent des nombres de bits
(moyens) par caractere optimaux par rapport a
toutes les autres codes prefix (les codes dans
lesquels aucun codage est le prefixe dun autre
codage). Neanmoins, il existe dautres methodes
de codage plus efficaces. Example codage
Lempel-Ziv. - Lalgorithme Hu-Tucker est lexample dun
algorithme gourmand (greedy). Il est execute en
temps O(n log n). - La longueur moyenne du code dune lettre est
- ?i fi longueur(code pour caractere i)
16Encodage Lempel-Ziv
- Idee la compression dun nombre arbitraire de
caracteres peut etre obtenue en formant
systematiquement une nouvelle chaine de
caraceteres basee sur une chaine de caracteres
deja rencontree plus un nouveau caractere. Cette
nouvelle chaine peut etre utilisee de la meme
facon par la suite. - Si le message original est court, cet encodage
peut prendre plus despace que le message
original. Neanmoins, pour des documents longs, il
est proche de lencodage parfait (a longueur
optimale).
17Example dencodage Lempel-Ziv
- aaababbbaaabaaaaaaabaabb
- ?aaababbbaaabaaaaaaabaabb
- 0 1 2 3 4 5 6 7 8 9 10
- 0a1a0b1b3b2a3a 6a 2b 9b
Division
index
Codage
18Comment construire des Codes Lempel-Ziv?
- Etape 1 Traverser le texte a coder et le diviser
en segments qui representent des chaines
representables par une chaine precedente (un
prefix) 1 caractere. - Etape 2 Indexer chacuns des segments obtenus.
Les encoder en utilisant une representation
binaire minimale. Il faut commencer avec le
segment vide(?). - Etape 3 traduire le texte segment par segment en
utilisant 1) le code pour le segment prefixe et
le nouveau caractere necessaire a la creation du
nouveau segment.
19Nombre de Bits necessaire pour Coder un Texte I
- Chaque segment de texte est represente par un
entier une lettre de lalphabet. - Au pire, le nombre de bits necessaire pour
representer chaque entier contenu a la position n
est egal au nombre de bits necessaire pour
representer la position n-1. - Par example, le nombre de bits necessaire pour
representer lentier 6 de la position 8 est egal
a 3 car il faut 3 bits pour exprimer lentier 7
en notation binaire. - Chaque caractere occuppe 8 bits car il est
represente en format ASCII.
20Nombre de Bits necessaire pour Coder un Texte II
- Dans notre example (diapo 17), on a donc besoin
de - ((08)(18)2(28)4(38)2(48)) 105
- Etant donne que le texte original etait compose
de 24 caracteres, prenant chacun 8 bits,
lencodage Lempel-Ziv ne nous offre pas de
reduction car 24 8 105 87, une reduction de
45!!! - Theoretiquement dans des fichiers contenant des
symboles independents et tires au hasard avec les
probabilites p1, p2, p3, etc le nombre anticipe
de bits necessaire par symbole tend vers
lentropie - ? pi log2 (1/pi)
- Lencodage Huffman atteint ce resultat, mais il
doit connaitre les probabilites de chaque
caractere. Lempel-Ziv latteint egalement mais
sans connaitre les probabilites.
21Comment Decoder les textes encodes?
- Une maniere efficace de reconstituer un texte
code est de construire un arbre de recherche
digital qui nous permet de decoder le texte en un
seul passage. - Example dun arbre de recherche digital partiel
22Techniques de Compression Irreversible
- La compression irreversible est basee sur la
supposition quun certain montant dinformation
peut etre sacrifie la compression irreversible
sappelle egalement la reduction dentropie.. - Example on peut reduire une image dun format
400 x 400 pixels a 100 x 100 pixels. La nouvelle
image contient 1 pixel pour chacun des 16 pixels
de limage originale. - Il est, dhabitude, impossible de determiner les
16 pixels originaux du nouveau pixel obtenu. - Bien entendu, dans les fichiers de donnees, la
compression irreversible nest pas tres utile.
Par contre, elle sert beaucoup dans le traitement
des images et de la parole.