Les Allergies
Alimentaires
Posez votre question Signaler

Parcourir arbre de huffman

Lord Van 27Messages postés 29 novembre 2005Date d'inscription - Dernière réponse le 12 avril 2008 à 16:52
Bonjour à tous,
voilà, je suis en train d'essayer de faire une fonction de parcours d'arbre de huffman. Cette fonction a pour rôle de construire le code de chaque caractère. Sachant que l'arbre a déja été construit préalablement, cette fonction parcourt l'arbre de sa racine jusqu'aux feuilles (qui sont les caractères), quand elle va vers la gauche de l'arbre, elle mets un 1 dans un tableau d'entiers, ou un 0 si elle va à droite. Ce tableau s'incrémente d'une case à l'aide d'un realloc à chaque fois que l'arbre "descend d'un étage". Donc, au final, la fonction de parcours d'arbre, ressort un tab de code de 2 lignes et de 256 colonnes, càd que chaque caractère a un entier qui lui est associé. Cet entier a la particularité d'être composé que de 0 ou de 1. Une fonction externe s'occupera d'écrire cet entier en codage binaire dans un fichier.
Ma fonction arbre utilise une fonction annexe qui a pr but de construire l'entier code. On a besoin de cette fonction car sans elle, code est un tableau donc chaque case a un entier. Mais ce que l'on veut, c'est que chaque entier des cases constitue un seul et unique entier. J'utilise alors un pile de nombre pr reconstituer ce nombre.

Donc j'ai besoin de votre aide pour corriger cette fonction de parcours d'arbre car ça fait 6heures que je suis dessus et je ne trouve pas la solution. Voici mes fonctions :

int Construction_code(int *code, int nb_entier){
int i,k;
pel p=NULL;
int val;
int coef=1;
int res=0;

for(i=0;i<nb_entier;i++){
p=empiler(p,code[i]);
}
while(p!=NULL){
p=depiler(p,&val);
res=res+val*coef;
coef=coef*10;
}
printf("l'entier du code est %i \n", res);
return res;
}



void parcours_arbre (pnoeud arbre, int tab_code[256], int *code,int nb_entier){
int i;
int h=0;
if((arbre->fg=NULL)&&(arbre->fd=NULL)){
tab_code[arbre->c]=Construction_code(code,nb_entier);
nb_entier=0;
}
else
if(arbre->fg){
nb_entier++;
code[nb_entier]=0;
parcours_arbre (arbre->fg, tab_code,realloc(code,sizeof(int)),nb_entier);}
else{
if(arbre->fd){
code[nb_entier]=1;
parcours_arbre (arbre->fd,tab_code,realloc(code,sizeof(int)),nb_entier);
}
}
}


UN grand merci d'avance
Lire la suite 

Parcourir arbre de huffman »

1 réponses
Réponse
+0
moins plus
je bosion procedur codage et decodage de arbre huffman et calculer la propabiliter de chaque caracter et afficher l' arbre
toute en programme pascal
merci
Ajouter un commentaire
Ce document intitulé « Parcourir arbre de huffman » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?