Rechercher : dans
Par :

Parcourir arbre de huffman

Dernière réponse le 12 avr 2008 à 16:52:38 Lord Van, le 17 avr 2006 à 17:02:47 
 Signaler ce message aux modérateurs

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

Meilleures réponses pour « Parcourir arbre de huffman » dans :
Codage de Huffman VoirLe codage de Huffman David Huffman a proposé en 1952 une méthode statistique qui permet d'attribuer un mot de code binaire aux différents symboles à compresser (pixels ou caractères par exemple). La longueur de chaque mot de code n'est pas...

1

 hakimlion, le 12 avr 2008 à 16:52:38

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

Répondre à hakimlion
Collection CommentÇaMarche.net