COMPRESSION ET DECOMPRESSION SELON L'ALGORITHME D'HUFFMAN

manouman Messages postés 6 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 8 février 2004 - 25 juin 2003 à 16:01
dossti Messages postés 4 Date d'inscription mercredi 4 mars 2009 Statut Membre Dernière intervention 12 octobre 2011 - 22 mai 2009 à 22:11
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/10659-compression-et-decompression-selon-l-algorithme-d-huffman

dossti Messages postés 4 Date d'inscription mercredi 4 mars 2009 Statut Membre Dernière intervention 12 octobre 2011
22 mai 2009 à 22:11
bonsoir j'ai telechrgé votre programme parce que je l'ai comme projet de fin d'etude mais je voulais vous demander est ce que c'est possible de m'expliquer que fait les fonctions correpondance_code,ecriture_lettre,nouveau_code et nouveau_code et j'aimerai bien comprendre qu'est ce qu'on ecrit dans le fic_ecr

je souhaite avoir une reponse le plus vite possible(au max 3jours)

merci d'avance
cs_annous87 Messages postés 1 Date d'inscription mercredi 28 janvier 2009 Statut Membre Dernière intervention 28 janvier 2009
28 janv. 2009 à 10:35
Merci beaucoup pour le programme.ton travail était impressionnant...
LogiLip Messages postés 1 Date d'inscription lundi 4 juin 2007 Statut Membre Dernière intervention 4 juin 2007
4 juin 2007 à 21:38
Salut, je me réinterresse a la compression, et je cherchais a me remémorrer le huffman. Bien joué pour le code.
Cependant y'a 2 truc pour améliorer:
- le calcul de puissance : si tu ne fait que des puissance de 2 tu peut éviter la boucle (si tu regarde en asm, ça bouffe vite des instructions et de la meme) tu peut direct utiliser un décalage :
return 1 << position; ---> ça fait 2^position (permet aussi de positionner un bit)
- L'algorithme est le huffman statique en 2 passes, si tu veut faire du temps réelle, faudrait passer en dynamique, le truc que je cherchais justement, c'est la manière de se passer de la création de l'arbre a chaque évennement ajouté... la je vois pas.
Bon courage pour la suite
vcprogrammer Messages postés 1 Date d'inscription jeudi 22 mars 2007 Statut Membre Dernière intervention 20 avril 2007
20 avril 2007 à 02:08
Merci pour le code, j'ai essayé de faire le projet moi même, mais j'avais un problème au niveau de construction de l'arbre ,mais avec ce code, j'ai bien trouvé la solution, encore merci.
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
3 août 2006 à 15:19
10/10 ... n'importe quoi, on aura tout vu.
Je ne comprend pas celui qui met 10/10 vu les problemes suivants :
* deux fonctions 'val', je sais c'est pas un probleme en C++, la signature fait la difference, mais la le boulot des deux fonctions est different, donc pour plus de clarte il faut deux noms differents pour eviter que se perde
* gros probleme de liberation memoire, les arbres ne sont pas liberes, et les piles ne sont pas toujours videes !!
* beaucoup trop de variables globales, (cpt_arbre_code,nb_char_dif,nb_lettre par exemple) dont l'initialisation n'est faite d'une fois au debut du programme, or si je veux utiliser la compression plus d'une fois dans un programme, la compression plante violemment car les variables n'ont pas ete reinitialisees
* BUG : dans la reconstruction, "pile" doit etre initialise a NULL
* BUG : dans depiler, le teste n'est pas "p != NULL" mais plutot "(*p) != NULL"
* lorsque le fichier est uniforme (i.e. le meme caractere a chaque fois dans le fichier de depart) alors il y a une bloc memoire qui n'est pas libere
cs_malibu23 Messages postés 36 Date d'inscription samedi 14 décembre 2002 Statut Membre Dernière intervention 15 avril 2008
10 juil. 2006 à 00:53
Merci pour le commentaire ca fais vraiment super plaisir :)

@++
cs_lol55 Messages postés 86 Date d'inscription dimanche 8 janvier 2006 Statut Membre Dernière intervention 5 décembre 2010
9 juil. 2006 à 15:31
Super!

Très Bien Commenté et la structure du Code! Mmmmh!
(J'adore)

Bravo

9/10

PS: Moi, J'ai pas de problème avec la décompilation...
cs_malibu23 Messages postés 36 Date d'inscription samedi 14 décembre 2002 Statut Membre Dernière intervention 15 avril 2008
29 mai 2006 à 20:03
Voila un site pour comprendre les bases déja :

http://tcharles.developpez.com/Huffman/
axeltheseducer Messages postés 1 Date d'inscription lundi 22 mai 2006 Statut Membre Dernière intervention 29 mai 2006
29 mai 2006 à 09:49
svp esce que klk1 peut m'aider??!!en m'envoyant des informations sur la décompression de huffman
ptidiable009 Messages postés 2 Date d'inscription dimanche 28 mai 2006 Statut Membre Dernière intervention 28 mai 2006
28 mai 2006 à 21:55
c'est difficile!!!!
jjbarbar Messages postés 1 Date d'inscription vendredi 21 avril 2006 Statut Membre Dernière intervention 3 mai 2006
3 mai 2006 à 18:39
En effet la décompression ne marche pas (et je suis surpris de la souplesse de Visual C++, quelle merde..) puisque que les erreurs viennent de tableaux mal dimensionnés pour lesquels on essaye d'acceder à des index du supérieur à la taille de ces tableaux : il y a tout d'abord le tableau bin qui devrait etre de taille 8 au lieu de taille 7 et puis ensuite le tableau arbre_code qui n'est evidement pas de la bonne taille dans la boucle :
for ( x = 0;x <= cpt_arbre_code;x++)
{
dec_bin(fgetc(fic_lec));
for (y = 0;y <= 7;y++)
arbre_code[8*x+y] = bin[y];}
qui precede un :
taille_arbre_code = (8*cpt_arbre_code+8)-1;
(qu'on pourrait reécrire : )
taille_arbre_code = (9*cpt_arbre_code)-1;

...Moi qui m'étais emmerdé à virer tout ce qu'il y avait de C++ dans le code pour pouvoir le compiler avec de simples compilateurs C...

Enfin la mémoire alloué (avec les new) n'est pas libéré, ce qui rend le code inutisable dans d'autres programmes (tout comme il faut alors eviter de compresser/decompresser) plusieurs fichiers successivement avec le .exe final.

Bref j'étais content de trouver un code qui me semblait assez concis pour pouvoir le compiler dans une tite appli , je vais finalement devoir me rabbatre sur la zlib (la dll fait tout de même 34k) à moins que je n'ai pas trop d'emmerdes avec la libbzip2 sous windoze...
manouman Messages postés 6 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 8 février 2004
8 févr. 2004 à 20:03
J'ai généré un fichier texte à partir d'un catalogue de produits. Donc il y avait un code produit, le prix, l'emplacement du produit, le libellé et les diverses promotions. Une ligne égale un produit et il y avait 10000 lignes. Donc 10000 produits. Le fichier pesé 8Mo. J'ai obtenu un taux de compression d'environ 0.5 car le fichier pesé en sorti 3.9Mo.
Voila tout !!!
DarkBoss Messages postés 154 Date d'inscription samedi 3 août 2002 Statut Membre Dernière intervention 12 décembre 2008
8 févr. 2004 à 18:36
ouaou et keske ta mis dans ton fichier texte ??????
manouman Messages postés 6 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 8 février 2004
25 juin 2003 à 18:34
Je viens de réussir à le faire fonctionner sous Visual C++ 6 mais le problème persiste sous Dev C++. Désolé de t'avoir embêté. Merci pour le source qui a un bon rendu, environ un facteur 2 sur un fichier texte de 8Mo.
cs_malibu23 Messages postés 36 Date d'inscription samedi 14 décembre 2002 Statut Membre Dernière intervention 15 avril 2008
25 juin 2003 à 18:05
Je vais te faire une reponse facile mais qui est pourtant vrai
chez moi il marche parfaitement.

Tu as essayer de compresser quoi ?
Quel Taille ?

JM
manouman Messages postés 6 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 8 février 2004
25 juin 2003 à 16:01
Salut,
J'ai téléchargé ton projet et je l'ai recompilé. La compression fonctionne correctement mais la décompression plante. L'exécutable fournit fonctionne correctement mais apparement il y a un problème avec les sources. As tu une solution ?
Rejoignez-nous