[VC++] COMPRESSION DE HUFFMAN+TUTORIEL

Galett Messages postés 115 Date d'inscription jeudi 7 février 2002 Statut Membre Dernière intervention 21 mai 2005 - 1 juin 2002 à 19:14
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 - 6 août 2006 à 00:54
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/9800-vc-compression-de-huffman-tutoriel

cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
6 août 2006 à 00:54
il manque des liberations memoires (des arbres surtout, et d'un buffer)
sinon un chose me chagrine :
fwrite(&nbdifferents,SIZE_UC,1,desti);//nombre de caratères différents (1 octet)

le probleme c'est que si le nombre de difference est 256, comme c'est code sur un unsigned char, ca enregistre sur un octet 0x00, donc il faut deux solutions : soit tu le codes sur 2 octets, soit tu enregistres (nbdifferents-1) au lieu de nbdifferents
kokoook Messages postés 2 Date d'inscription mardi 1 février 2005 Statut Membre Dernière intervention 15 mai 2005
15 mai 2005 à 13:09
en fait je suis pas un expert en c++ svp comment contre construire l'exécutable ?
merci
kokoook Messages postés 2 Date d'inscription mardi 1 février 2005 Statut Membre Dernière intervention 15 mai 2005
14 mai 2005 à 16:58
bonjour en fait je compile ton code et sa marche mais pour l'executer sa me donne ca :

Linking...
Huffman.obj : error LNK2001: unresolved external symbol "void __cdecl effacerListe(struct element *)" (?effacerListe@@YAXPAUelement@@@Z)
Huffman.obj : error LNK2001: unresolved external symbol "void __cdecl coderA(struct noeud *,struct caractere *,int,int)" (?coderA@@YAXPAUnoeud@@PAUcaractere@@HH@Z)
Huffman.obj : error LNK2001: unresolved external symbol "struct element * __cdecl delister(struct element *,struct noeud *)" (?delister@@YAPAUelement@@PAU1@PAUnoeud@@@Z)
Huffman.obj : error LNK2001: unresolved external symbol "struct noeud * __cdecl fusionner(struct noeud *,struct noeud *,unsigned char,int)" (?fusionner@@YAPAUnoeud@@PAU1@0EH@Z)
Huffman.obj : error LNK2001: unresolved external symbol "int __cdecl nombreElementsListe(struct element *)" (?nombreElementsListe@@YAHPAUelement@@@Z)
Huffman.obj : error LNK2001: unresolved external symbol "struct element * __cdecl enlister(struct element *,struct noeud *)" (?enlister@@YAPAUelement@@PAU1@PAUnoeud@@@Z)
Huffman.obj : error LNK2001: unresolved external symbol "struct noeud * __cdecl nouvelArbre(unsigned char,int,int)" (?nouvelArbre@@YAPAUnoeud@@EHH@Z)
Huffman.obj : error LNK2001: unresolved external symbol "enum Booleen __cdecl chercher(unsigned int,unsigned int,struct noeud *,unsigned char *)" (?chercher@@YA?AW4Booleen@@IIPAUnoeud@@PAE@Z)
Huffman.obj : error LNK2001: unresolved external symbol "void __cdecl reconstruireArbre(struct noeud * *,unsigned int,unsigned int,unsigned char)" (?reconstruireArbre@@YAXPAPAUnoeud@@IIE@Z)
Debug/Huffman.exe : fatal error LNK1120: 9 unresolved externals
Error executing link.exe.

Huffman.exe - 10 error(s), 0 warning(s)

je sais pas quoi faire aidez moi svp !!!!!!!
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
18 juil. 2004 à 01:16
eh les gars, faut pas abuser, quand on a pas word, et que l'on ne veut pas payer une licence a microsoft, on télécharge open ofice.org, c'est gratuit!
Huffman, c'est assez performant, bien joué!!!
Il y avait un login qui l'expliquais, j'avais compris comment il marchait, mais jamais réussi a créer mon prog (et j'ai eu la fleme de m'y metre plus de trois heures...)
Bien joué, même si ça sert a rien car on a bzip2 qui l'inclut...
victorcoasne Messages postés 1101 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 23 juillet 2023 7
7 juil. 2004 à 18:38
Pour bobbyf > Tu copies huffman.exe dans C:
Tu lance l'invite MS-DOS et tu tape pour compresser :
C:\huffman -c source.ext destination.ext
Pour décompresser :
C:\huffman -d source.ext destination

exemple tu as essai.txt sur C:

Tu tape pour le compresser : C:\huffman -c C:\essai.txt C:\essai.txt.compres
Pour le décompresser :
C:\huffman -d C:\essai.txt.compres C:
cela devrait marcher

Le créateur du site www.jscv.com
cs_psycho Messages postés 232 Date d'inscription samedi 11 mai 2002 Statut Membre Dernière intervention 27 octobre 2007
12 juin 2004 à 19:31
je ne comprends pas à quoi sert la fonction chercher dans le code de huffman, arbre.cpp
pourrais -tu m'éclairer de ta lumière ???

sinon, bo boulot, la prog est pas mal du tout....
je met 9/10
cs_nhs Messages postés 1 Date d'inscription mardi 17 février 2004 Statut Membre Dernière intervention 2 mars 2004
2 mars 2004 à 11:09
Salut !
merci pour ton code et le tut
g un peu de mal a comprendre la partie rincipale de la compression

while(compteur<taille+1)
{
c=bufferfichier[compteur-1];
temp+=((tableau[c].codeHuffman)>>(tableau[c].nbits-1-j))&1;
if(i>=SIZEEX&&j>=(tableau[c].nbits-1))


pourait tu m'expliquer les tests (if)
merci
soporifik27 Messages postés 7 Date d'inscription mercredi 5 novembre 2003 Statut Membre Dernière intervention 6 janvier 2004
15 déc. 2003 à 20:06
ou en latex sa pourrai etre cool ossi ;-) merci
paske word... j'ai pô non plu
cs_Nebula Messages postés 787 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 7 juin 2007 2
8 juin 2003 à 15:02
Salut !

Je n'ai pas Word 2000 => Pas moyen de lire le tutorial, qui m'aiderait certainement à comprendre la source... Peux-tu me le convertir ? (si possible en HTML, sinon en RTF, j'utilise que Wordpad...)

Merci d'avance ;)
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
30 déc. 2002 à 16:07
merci pour ta contribution... je la prend sur le champ...
Galett Messages postés 115 Date d'inscription jeudi 7 février 2002 Statut Membre Dernière intervention 21 mai 2005
1 déc. 2002 à 01:52
hummm je crois ke XP émule les prog dos(G po XP, donc pas sur) mais normalement tu devrais qd même pouvoir passer des param au prog...
cs_GoldenEye Messages postés 527 Date d'inscription vendredi 14 septembre 2001 Statut Membre Dernière intervention 6 octobre 2008 4
24 nov. 2002 à 20:21
alors là je ne sais pas...
bobbyf Messages postés 4 Date d'inscription samedi 23 novembre 2002 Statut Membre Dernière intervention 25 mai 2003
24 nov. 2002 à 17:36
ben j'ai windows xp et j'ai pas dos mais l'invite de commande et quand je tape juste huffman.exe ,j'ai le message d'erruer que je t'ai cite precedemment
cs_GoldenEye Messages postés 527 Date d'inscription vendredi 14 septembre 2001 Statut Membre Dernière intervention 6 octobre 2008 4
24 nov. 2002 à 13:40
Ah je n'avais pas compris:
Ouvre une fenêtre DOS et va dans le répertoire de l'exécutable huffman.exe
huffman -c source.ext destination.ext pour compresser
huffman -d source.ext destination (sans l'extension) pour décompresser.
Lis la doc, il y a un exemple à la fin
bobbyf Messages postés 4 Date d'inscription samedi 23 novembre 2002 Statut Membre Dernière intervention 25 mai 2003
24 nov. 2002 à 13:04
je me suis mal exprime .je sais qu'il faut le compiler et j'obtiens le meme huffman.exe que le tien. mais apres que faire pour essayer de compresser un fichier ? quand j'execute huffman.exe ap artir de l'inivte de commande j'obtiens comme message comme 'huffman.exe' n'est pas reconu en tant que commande interne .que faire ? toi tu fais comment? merci de me repondre
cs_GoldenEye Messages postés 527 Date d'inscription vendredi 14 septembre 2001 Statut Membre Dernière intervention 6 octobre 2008 4
23 nov. 2002 à 17:19
voilà la mise à jour a été faite
cs_GoldenEye Messages postés 527 Date d'inscription vendredi 14 septembre 2001 Statut Membre Dernière intervention 6 octobre 2008 4
23 nov. 2002 à 17:16
Mais il faut compiler le source ! M'enfin si tu le désires, je vais uploader l'exe aussi
bobbyf Messages postés 4 Date d'inscription samedi 23 novembre 2002 Statut Membre Dernière intervention 25 mai 2003
23 nov. 2002 à 16:57
mais il ny'a pas de huffman.exe ? comment le faire ?
cs_GoldenEye Messages postés 527 Date d'inscription vendredi 14 septembre 2001 Statut Membre Dernière intervention 6 octobre 2008 4
5 juin 2002 à 13:29
Petit bug: la décompression du dernier caractère est fausse 1 fois sur 3. je n'arrive pas à corriger l'erreur. Un pastis à celui qui me dit ce qu'il faut changer
cs_GoldenEye Messages postés 527 Date d'inscription vendredi 14 septembre 2001 Statut Membre Dernière intervention 6 octobre 2008 4
2 juin 2002 à 20:52
1/ Bits de bourrage: le dernier caractère peut n'occuper que 4 bits par exemple. Que faire des quatre derniers bits pour former un octet ? Et bien il faut les remplir avec ce que l'on veut. C'est l'opération dite de bourrage. En réalité, le pb ne s'est pas posé avec Huffman dans la mesure où on bourrait avec n'importe quoi mais on sauvegardait le nombre de caractères encodés.
2/on ajoute à temp 0 ou 1 selon que le bit numéro "nbits-1-j" de tableau[c] est égal à 0 ou 1
Ex
j=1
tableau[c]=5 soit 100 en binaire
nbits=3
temp=2
tableau[c].nbits-1-j=1 ->on regarde le bit 1 de tableau[c] qui est 0
Donc temp=temp+0
C'est clair ?
3/pour les compressions successives, ça marche dans certains cas. Mais je n'ai jamais eu de pb à la décompression (n'oublie pas de faire trois décompressions à la suite). Envoie moi le fichier
4/ pour les très gros fichiers, le pb est lié au fait que les int sont sur 4 octets et que certains codes dépassent cette valeur de 2^32 (c'est un hypothèse)
5/Moi aussi j'ai des exams !
Galett Messages postés 115 Date d'inscription jeudi 7 février 2002 Statut Membre Dernière intervention 21 mai 2005
1 juin 2002 à 19:14
Merci pour ce tut très sympa, G juste 2-3 p'tites questions, qu'appelles-tu les bits de bourrage(de poids forts ?(sens informatique voyons !)Overflow ?)

et sinon, si tu pouvais expliquer un peu la fct°
[ temp+=((tableau[c].codeHuffman)>>(tableau[c].nbits-1-j))&1;//une formule à la GoldenEye...],
G pas eu le tps de décortiquer entièrement ton source, je passe des exams en ce moment, mais je verrai ça après.

Sinon, le code marche super, mais un autre truc G recompressé un fichier déja compressé avec ce code(d'ailleurs ratio 1: 80% ratio2: 54% !!,et 3 : 15% :o)

mais pour décompressé (donc 3 fois de suite) ca marche plus, doit y avoir un ti prob, vàla si ca peut t'aider pour ton prob avec les gros fichier(10Mo)

PS:pour info, c t un bmp que G utilisé pour avoir de bons résultats même après une première compression
Rejoignez-nous