Structure de données Arbre de Huffman

nicloss Messages postés 4 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 26 novembre 2005 - 26 nov. 2005 à 15:33
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 - 26 nov. 2005 à 20:29
Bonjour, j'ai un projet en programmation c qui consiste à coder un programme qui compresse selon l'algorithme de Huffman.

J'ai bien compris le principe mais je n'ai pas beaucoup d'expérience en
prog c et le prof nous oblige à utiliser une structure qu'il nous a
donné pour l'arbre.

Et le problème est que je ne comprend pas cette structure et donc je ne sais pas comment l'utiliser.

Si quelqu'un pouvait m'expliquer cette structure, cela m'aiderai beaucoup...

Merci d'avance,



typedef unsigned char uchar;

/* Attention : ulong déjà défini dans "/usr/include/sys/types.h" */

typedef unsigned long ulong;

struct huffman {

enum { EXTERNE, INTERNE} type; /* Donnée dans champ u */

union {

struct {

struct huffman *fg; /* Code 0 */

struct huffman *fd; /* Code 1 */

} interne; /* Un noeud interne */

uchar feuille; /* La valeur de l'octet */

} u;

ulong proba; /* Le nombre d'occurence (cumulé pour un noeud interne) */

};

typedef struct huffman *huffman;

6 réponses

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
26 nov. 2005 à 16:07
La structure, c'est un arbre. Un arbre, c'est soit une feuille, soit une noued, avec sous sous arbre gauche et un sous arbre droit. Union exprime ce choix entre feuille et noeud, c'est un peu moche c'est vrai
0
nicloss Messages postés 4 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 26 novembre 2005
26 nov. 2005 à 16:14
Merci beaucoup de ta réponse.



Donc avec cette structure je peux coder Huffman ?

Tu pourrais m'expliquer comment utiliser feuille et noeud pour la suite de mon programme?

Car si je n'arrive pas à accéder à ces champs, je suis mal barré !!!

La structure est un peu complexe et je ne vois pas trop comment accéder aux différents champs.

J'ai vu pas mal de sources sur l'algo d'Huffman et aucun n'utilise de structure similaire.
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
26 nov. 2005 à 16:34
Pour ce type de structures, le langage C n'est pas terrible. Le langages à objets sont bien plus adaptés.
Pour utiliser ta structure, tu aura des codes du genre:
struct huffman* h; // que tu obtiens de je ne sais pas où
pour savoir si c'est une feuille, tu as h->type
if(h->type == EXTERNE)
{
h->feuille contient la valeur de la feuille
}
else
{
h->interne.fg et h->interne.fd désignent les sou-arbres
}

Bonne chance
0
nicloss Messages postés 4 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 26 novembre 2005
26 nov. 2005 à 16:43
Merci beaucoup !!!

Je pense que je vais pouvoir avancer...

Et si je bloque encore pour l'utilisation de la structure, je reviendrais faire un tour...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
nicloss Messages postés 4 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 26 novembre 2005
26 nov. 2005 à 19:22
Bon j'ai encore des petits problèmes pour utiliser la structure...

Le programme me met des "Segmentation Fault" lorsque que je veux affecter des valeurs à mes champs.

Je m'y prend surement mal !!!

Par exemple, pour affecter 10 au champ "proba", je fais ça :



h->proba = 10;



Et ça ne marche pas.

Tu peux m'aider ?



je crois que je n'ai pas encore parfaitement compris comment utiliser ces put*** de champs !!!
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
26 nov. 2005 à 20:29
Bien sur, dans l'exemple que je t'ai donné, h n'est pas initialisé. Du as sans doute un algo a suivre ou quelque chose, non? Si ce n'est pas le cas, bon courage car l'algo n'est pas particulièrement simple a coder. Tu as un exemple dans mes sources si tu veux
0
Rejoignez-nous