COMPRESSION ET DECOMPRESSION SELON L'ALGORITHME D'HUFFMAN
manouman
Messages postés6Date d'inscriptionjeudi 9 janvier 2003StatutMembreDernière intervention 8 février 2004
-
25 juin 2003 à 16:01
dossti
Messages postés4Date d'inscriptionmercredi 4 mars 2009StatutMembreDernière intervention12 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.
dossti
Messages postés4Date d'inscriptionmercredi 4 mars 2009StatutMembreDernière intervention12 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és1Date d'inscriptionmercredi 28 janvier 2009StatutMembreDernière intervention28 janvier 2009 28 janv. 2009 à 10:35
Merci beaucoup pour le programme.ton travail était impressionnant...
LogiLip
Messages postés1Date d'inscriptionlundi 4 juin 2007StatutMembreDerniè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és1Date d'inscriptionjeudi 22 mars 2007StatutMembreDernière intervention20 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és1138Date d'inscriptionmardi 10 juin 2003StatutMembreDernière intervention25 janvier 20094 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és36Date d'inscriptionsamedi 14 décembre 2002StatutMembreDernière intervention15 avril 2008 10 juil. 2006 à 00:53
Merci pour le commentaire ca fais vraiment super plaisir :)
@++
cs_lol55
Messages postés86Date d'inscriptiondimanche 8 janvier 2006StatutMembreDerniè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és36Date d'inscriptionsamedi 14 décembre 2002StatutMembreDernière intervention15 avril 2008 29 mai 2006 à 20:03
axeltheseducer
Messages postés1Date d'inscriptionlundi 22 mai 2006StatutMembreDernière intervention29 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és2Date d'inscriptiondimanche 28 mai 2006StatutMembreDernière intervention28 mai 2006 28 mai 2006 à 21:55
c'est difficile!!!!
jjbarbar
Messages postés1Date d'inscriptionvendredi 21 avril 2006StatutMembreDerniè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és6Date d'inscriptionjeudi 9 janvier 2003StatutMembreDerniè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és154Date d'inscriptionsamedi 3 août 2002StatutMembreDernière intervention12 décembre 2008 8 févr. 2004 à 18:36
ouaou et keske ta mis dans ton fichier texte ??????
manouman
Messages postés6Date d'inscriptionjeudi 9 janvier 2003StatutMembreDerniè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és36Date d'inscriptionsamedi 14 décembre 2002StatutMembreDernière intervention15 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és6Date d'inscriptionjeudi 9 janvier 2003StatutMembreDerniè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 ?
22 mai 2009 à 22:11
je souhaite avoir une reponse le plus vite possible(au max 3jours)
merci d'avance
28 janv. 2009 à 10:35
4 juin 2007 à 21:38
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
20 avril 2007 à 02:08
3 août 2006 à 15:19
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
10 juil. 2006 à 00:53
@++
9 juil. 2006 à 15:31
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...
29 mai 2006 à 20:03
http://tcharles.developpez.com/Huffman/
29 mai 2006 à 09:49
28 mai 2006 à 21:55
3 mai 2006 à 18:39
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...
8 févr. 2004 à 20:03
Voila tout !!!
8 févr. 2004 à 18:36
25 juin 2003 à 18:34
25 juin 2003 à 18:05
chez moi il marche parfaitement.
Tu as essayer de compresser quoi ?
Quel Taille ?
JM
25 juin 2003 à 16:01
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 ?