Je vous ai déjà parlé avec KrISS tuto d'un petit cours sur la compression de données où je présente les algorithmes classiques de compression sans perte (Huffman, Huffman adaptatif, le codage arithmétique, rle, lz77, lz78, lzw).
Pour la partie pratique, j'ai eu du mal à trouver des algorithmes qui fonctionnaient bien et qui permettaient d'illustrer ce que je montrais en cours. J'ai utilisé un temps https://sourceforge.net/projects/compressions/ mais la compilation n'était pas toujours simple et j'ai donc cherché des versions python que j'ai regroupé dans KrIIS lldc. C'est vraiment à but pédagogique et je ne vous invite pas à utiliser ce code pour compresser de vrais fichiers ! Personnellement je ne le ferai pas.
J'ai uniformisé l'usage des algorithmes et ajouté un petit bout de code pour le codage binaire du résultat. Les ordinateurs stockent l'information avec des octets (8 bits) mais quand on a besoin de stocker un nombre de bits précis qui n'est pas multiple de 8 c'est un peu compliqué, il faut trouver une méthode pour arriver à relire le résultat. J'imagine qu'il y a une solution existante mais je n'ai pas vraiment cherché et je me suis dit qu'il suffisait d'utiliser les 3 derniers bits d'un octet pour savoir combien de bits sont à supprimer.
"0": "00000100"
"1": "10000100",
"01": "01000011",
"010": "01000010",
"0110": "01100001",
"01110": "01110000",
"011110": "0111100000000111",
"0111110": "0111110000000110",
"01111110": "0111111000000101",
"011111110": "0111111100000100"
Il suffit de prendre les 3 derniers bits par exemple pour "0111110000000110" on a "110" ce qui donne 6 en décimal. On supprime donc les 3+6 derniers bits et on retrouve "0111110" qu'on voulait stocker à l'origine.