Je propose ma version de l'algorithme d'Huffman. J'ai vu qu'il y avait déjà plein de source sur ce site.
Cependant ils decoupent les fichiers par 1 octet. Je propose 4 algorithmes :
decoupage en 8 bits, 16 bits, 24 bits, et 32 bits.
Si vous trouvez un bug, SIGNALEZ-LE !
De plus j'ai pris toutes les sources d'Huffman de ce site, et puis j'ai comparé quatre choses :
- la rapidité de compression
- la rapidoté de décompression
- la taille de la table d'Huffman dans le fichier
- la taille finale du fichier comprimé
Les auteurs des sources comparées sont :
JCDjcd(les 4 algo.), mido23, oim09, Malibu23, Croqmort, Deimoslp, TheWhiteShadow, et vecchio56.
Il manque quelques auteurs :
- Kreator : ne comprime pas tous les fichiers
- GoldenEye : ne comprime pas les gros fichiers
- vieuxLion : le code est en C++, désolé, mais je sais pas faire de C++, que du C ...
Je présente les résultats des comparaisons pour différents fichiers :
- baudelaire.txt : un petit poème de Baudelaire
- nBodyProblem.c : un fichier C (cf. problème des N corps sur ce site)
- HTML.htm : un fichier html (cf. méthode d'Euler sur ce site)
- BITMAP.bmp : image avec deux-trois rectangles et un texte "hello world"
- fractale.bmp : une image d'un fractale (celle de mon pseudo)
- ZIP.zip : un zip, normalement difficilement "comprimable" (cf. jeu de la vie sur ce site)
- JPEG.jpg : un fichier au format JPEG
J'aurais juste trois remarques à faire sur les autres sources d'Huffman :
- la majorité des sources ne libére pas toute la mémoire allouée,
ce qui est grave quand on veut faire des compressions à la suite
- j'ai noté quelques bugs dans les sources non-corrigées !
- beaucoup de programme ne traite pas le cas où le fichier est uniforme (un seul caractere dans le fichier)
dans ce cas là, l'arbre d'Huffman est réduit à sa racine => beaucoup de BUG