COMPRESSION HUFFMAN ( INTERFACE EN API WINDOWS )

cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 - 11 juil. 2006 à 18:38
amira4iag Messages postés 1 Date d'inscription samedi 17 février 2007 Statut Membre Dernière intervention 17 avril 2007 - 17 avril 2007 à 15:34
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/38522-compression-huffman-interface-en-api-windows

amira4iag Messages postés 1 Date d'inscription samedi 17 février 2007 Statut Membre Dernière intervention 17 avril 2007
17 avril 2007 à 15:34
Quels sont les étapes pour ouvrir un nouveau projet en visual c++ 6.0 telque le votre? votre code est important.merci
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
31 août 2006 à 10:12
Le seul problème est que tu es impatient et donc tu ne laisse pas le temps au cache de s'actualiser (plusieurs heures parfois).
PEBKAC =)
deimoslp Messages postés 12 Date d'inscription dimanche 22 juin 2003 Statut Membre Dernière intervention 12 juillet 2007
28 août 2006 à 02:23
J'ai eu quelques problèmes pour l'ajout de cette première mise a jour...

J'ai cependant bien travaillé dessus, mais a vous d'en juger.
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
5 août 2006 à 23:32
Il y a deux problemes :
le premier pas tres grave, mais ton code de gere pas les fichiers uniformes (une seul caractere), mais c'est pas important
le second : probleme de liberation memoire, j'ai enregistre chaque Malloc (ou new ...) et chaque Free (ou delete ...) et a la fin du programme il reste des blocs memoires non-liberes. J'ai mene ma petite enquete et le probleme vient de la fonction <nettoyage> : l'instruction "delete noeud;" devrait etre EN DEHORS du "if(noeud->filsg)"
car sinon les feuilles ne sont pas liberees
cs_petitecherie Messages postés 1 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 17 juillet 2006
17 juil. 2006 à 17:10
perso je trouve que c'est un code bien pensé qui m'a pas mal servi; l'implémentation rend les choses bien pratiquables...
deimoslp Messages postés 12 Date d'inscription dimanche 22 juin 2003 Statut Membre Dernière intervention 12 juillet 2007
13 juil. 2006 à 15:37
STORMY> Merci ça fait toujours plaisir :)

VECCHIO56> Il s'agit d'une erreur de ma part: je ne savais pas que l'opérateur ^ était en fait un xor, je l'ai pris pour un opérateur puissance. Quant à unitmem il s'agit d'un type(ici un unsigned char) que je pensais changer selon mes besoins (si je souhaitais travailler sur 2 ou 3 octets) mais j'ai finalement implémenté ça autrement.
Tout ça pour dire que "256^sizeof(unitmem)" correspondrait normalement au nombre de symboles codables sur 1 octet (soit 256).
J'ai corrigé tout ça dans la nouvelle version et j'espère avoir le temps de la finir avant de partir en vacances ^^.
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
13 juil. 2006 à 15:03
Je commence juste a lire ton code et je comprends pas quand tu écris 256^sizeof(unitmem)
cs_Stormy Messages postés 255 Date d'inscription samedi 20 avril 2002 Statut Membre Dernière intervention 16 janvier 2007
12 juil. 2006 à 23:22
J'ai trouvé cette source vraiment édifiante pour un résultat exploitable.
Bravo et merci ++
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
12 juil. 2006 à 15:23
Ben justement, tu insère les éléments de sorte que le tableau soit tjs trié. C'est bien, mais tu as sans doute fait ça de la façon la plus directe (on avance dans le tableau, on décale toute la suite et on place l'élément). Or, il y a bien plus rapide (on fait une binary search sur le tableau par exemple, pr trouver l'endroit où effectivement placer le nouvel élément). Avec une file à priorités, tu aurais une insertion en log(n) et une extraction en log(n), ce qui est tout de même agréable, et surtout utile si tu comptes étendre huffman aux images 24 bits (bcp de symboles).

Soit dit en passant, pense à mentionner tes résultats sur les compressions d'images, ça m'intéresserait :).
deimoslp Messages postés 12 Date d'inscription dimanche 22 juin 2003 Statut Membre Dernière intervention 12 juillet 2007
12 juil. 2006 à 14:30
Alors je vais essayer de répondre à ta question : Pour construire l'arbre de codage, j'ai fait un tri par insertion des symboles à ajouter à l'arbre, à fréquence d'apparition décroisante. Mais ce n'est pas vraiment une file en tant que telle, vu que j'ai implémenté ça dans un tableau. Il aurait été plus propre d'utiliser une liste chainée mais je n'y ai pas pensé sur le coup.
A voir pour la prochaine version... ^^
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
12 juil. 2006 à 13:57
J'ai pas lu ton code, t'as utilisé une file à priorités pour construire l'arbre, ou tu as extrait le prochain symbole à ajouter à l'arbre chaque fois en cherchant le symbole le plus répété à travers une liste? A mon avis, si tu as utilisé une priority queue, tu auras compris ma phrase, et sinon pas, parce que c'est très mal dit :p
deimoslp Messages postés 12 Date d'inscription dimanche 22 juin 2003 Statut Membre Dernière intervention 12 juillet 2007
12 juil. 2006 à 13:09
MOGWAI93 > C'est sympa d'avoir testé sous DevC++ que j'ai eu la flemme d'installer :-p; je tacherai de corriger le code dans la prochaine version.

KIRUA > En fait j'avais regardé auparavant sur la page de wikipedia http://fr.wikipedia.org/wiki/Taux_de_compression , et puis j'ai vérifié sous WinRAR, ce qu'ils appellent 'ratio' c'est bien la même chose que mon taux de compression...
Enfin tout ça c'est du détail, et je suis d'accord, Huffman est bien cool à programmer :p.
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
12 juil. 2006 à 10:22
C'est T = 1 - (taille_fichier_compressé/taille_fichier_original)

puisque c'est assez logique d'avoir un taux de compression nul si le nouveau fichier à la même taille que l'original. et d'ailleurs, avec huffman, on peut aussi avoir pire. Il n'y a sans doute pas plusieurs définitions, mais il est possible que les gens ne soient pas d'accord sur le sens à donner ^^. Quoi qu'il en soit, dans les programmes pros de compression, plus le taux est élevé, mieux c'est compressé.

Et Huffman, c'est un cooooool algo :).
mogwai93 Messages postés 362 Date d'inscription mardi 31 décembre 2002 Statut Membre Dernière intervention 4 novembre 2023
11 juil. 2006 à 21:39
"Le programme a été développé sous visual c++, donc j'ai bien peur qu'il soit difficile de le compiler dans d'autres environnements."

ca passe sous DevC++ !!
en modifiant 1 ligne dans le fichier "huffman.cpp"
void donnee_construit()

il faut mettre :
// décalage
unsigned int i;
for(i=2;i<nbarbres;i++)

> sortir unsigned int de la boucle for
pour que i soit reconnu en dehors lors de l'appel
listearbre[i-2]=noeud;

pour les warning, ils sont facilement corrigibles ;-)
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
11 juil. 2006 à 19:14
mais l'entropie ce n'est pas la meme chose que la longueur moyenne des mots ...
ca serait bien de pouvoir calculer l'entropie d'un fichier, et tu montrerais la difference d'entropie (ie l'elevation d'entropie due a la compression)
deimoslp Messages postés 12 Date d'inscription dimanche 22 juin 2003 Statut Membre Dernière intervention 12 juillet 2007
11 juil. 2006 à 19:05
En fait j'ai juste appliqué une formule que j'ai trouvée sur le net pour calculer l'entropie. En gros, l'entropie est comprise entre 0 et 8, dans le cas d'une compression par mots de 1 octet; plus elle est faible et plus la compression sera efficace pour le fichier ouvert.
Le taux de redondance, qui est basé sur cette grandeur est peut-etre un peu plus significatif ...
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
11 juil. 2006 à 18:38
pour moi l'entropie donnee comme cela "brute & seule" n'a aucun sens, il faudrait peut etre la comparer a une autre grandeur comme par exemple la longueur moyenne (ou autre chose de pertinent du genre quelle est l'entropie des images usuelles : bitmap de la mer, photos de famille, textes litteraires, conversations MSN) enfin juste pour avoir une idee, pour situer le fichier parmi ces exemples.
Rejoignez-nous