M1 RSD ‐ Multimédia
Exercices compression de données
Soit la chaine : ABCDDDEABCDD
1- Appliquer la compression RLE (la méthode du fax). On considère une répétition lorsqu'elle est
supérieure à 2 et on utilise un octet pour la coder.
00000011 ABC 10000011 D 00000110 EABCDD
3 ABC 131 D 6 EABCDD
2- Appliquez la compression de Huffman, donnez l’arbre, la table de codage et la chaine codée.
Donner le taux de compression.
A : 2
B:2
C:2
D:5
E:1
Dictionnaire :
A : 000
B : 001
C : 010
D:1
E : 011
Sortie : remplacer chaque caractère par son code.
00000101011101100000101011
Remarque: l’ordre entre les caractères A, B et C peut changer.
Taux de compression: 26 + (13+8*5) / 12*8 = 82.3%
M1 RSD ‐ Multimédia
3- Appliquez la compression LZW en supposant que le caractère ayant le code 1 est le A et que le
dernier caractère du dictionnaire initial a le code 10 (écrire le déroulement de chaque étape).
Soit la chaine : ABCDDDEABCDD
Sortie : 1 2 3 4 14 5 11 13 4
A 1 w a
B 2 A B
C 3 B C
D 4 C D
E 5 D D
... ... D D
10 DD E
AB 11 E A
BC 12 A B
CD 13 AB C
DD 14 C D
DDE 15 CD D
EA 16 D -
ABC 17
CDD 18
Compression:
Initialiser dictionnaire D
W <- lire un caractère
Tant qu’il reste des caractères à lire faire
a <- lire caractère
si ( w + a est dans D ) alors
w <- w + a
sinon
écrire le code de w
ajouter w + a dans D
w <- a
fin si
fin tant que
écrire le code de w
M1 RSD ‐ Multimédia
4- Soit la chaîne de codes suivante résultat de la compression LZW:
88 88 89 89 96 99 96 97 100
Donnez la chaîne initiale en supposant que le code de ‘x’ est 88, et que le dernier caractère codé
dans le dictionnaire est ’~’ ayant le code 94.
Sortie : x x y y x y x y x x y y y x y x x
x 88 a b w
y 89 88 88 x
z 90 88 89 y
... 89 89 y
~ 94 89 96 xy
xx 95 96 99 xyx
xy 96 99 96 xy
yy 97 96 97 yy
yx 98 97 100 xyxx
xyx 99 100 -
xyxx 100
xyy 101
yyx 102
Décompression :
Initialiser dictionnaire D
a <- lire caractère
écrire D(a)
Tant qu’il reste des caractères à lire faire
b <- lire caractère
si b est dans D alors
w <- D(b)
sinon
w <- D(a) + premier caractère de D(a)
fin si
écrire w
ajouter D(a) + premier caractère de w à D
a <- b
fin tant que