Codage Huffman - Affichage d'un tableau des caractères
zibrata
Messages postés
37
Statut
Membre
-
[Dal] Messages postés 6373 Statut Contributeur -
[Dal] Messages postés 6373 Statut Contributeur -
Mes salutation !
Dans le cadre d'un projet en C je dois réaliser un algorithme d'Huffman.
Afin de valider le projet il m'est demandé quelques points essentiels :
1) La lecture d’un fichier texte sur le disque
2) L'affichage du tableau des caractères, de la fréquence et du code associé
3) La génération d'un arbre en fonction des occurrences des caractères
J'ai réussi le 1) :
Mais je me trouve bloqué pour le 2)... J'ai crée la structure Noeud car je pense que j'en aurais besoin mais je ne sais pas vraiment comment l'utiliser afin d'afficher un tableau des fréquences des caractères ainsi que du code associé.
Je ne demande pas le code tout fait, je demande de l'aide afin de comprendre comment manipuler ces caractères un par un et en sortir leurs fréquences.
Merci d'avance,
zibrata
Dans le cadre d'un projet en C je dois réaliser un algorithme d'Huffman.
Afin de valider le projet il m'est demandé quelques points essentiels :
1) La lecture d’un fichier texte sur le disque
2) L'affichage du tableau des caractères, de la fréquence et du code associé
3) La génération d'un arbre en fonction des occurrences des caractères
J'ai réussi le 1) :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define TAILLE_MAX 1000
typedef struct Noeud Noeud;
struct Noeud {
char caractere;
int frequence;
struct Noeud *droit,*gauche;
};
void lireTexte(FILE* fichier) {
char chaine[TAILLE_MAX] = ""; // Chaîne vide de taille TAILLE_MAX
if (fichier != NULL)
{
fgets(chaine, TAILLE_MAX, fichier); // On lit maximum TAILLE_MAX caractères du fichier, on stocke le tout dans "chaine"
printf("Lecture du fichier : '%s'\n\n", chaine);
fclose(fichier);
}
}
Mais je me trouve bloqué pour le 2)... J'ai crée la structure Noeud car je pense que j'en aurais besoin mais je ne sais pas vraiment comment l'utiliser afin d'afficher un tableau des fréquences des caractères ainsi que du code associé.
Je ne demande pas le code tout fait, je demande de l'aide afin de comprendre comment manipuler ces caractères un par un et en sortir leurs fréquences.
Merci d'avance,
zibrata
A voir également:
- Codage Huffman - Affichage d'un tableau des caractères
- Codage ascii - Guide
- Tableau word - Guide
- Trier un tableau excel - Guide
- Imprimer un tableau excel - Guide
- Caractères spéciaux - Guide
1 réponse
Salut zibrata,
Je n'ai jamais fait d'implémentation de l'algorithme d'Huffman, mais comme personne ne répond, je te donne quelques indications qui me viennent à l'esprit.
Ma compréhension est que tu dois ici faire une première passe, puisque tu dis devoir décompter les fréquences correspondant exactement à ton texte.
Si je devais le faire, je le ferais avec un tableau de 256
Ensuite, tu te sers du contenu du tableau pour construire ton arbre, en utilisant les pointeurs vers les entrées du tableau associatif qui contiennent ton décompte...
cela paraît pas mal... non ? :-)
Sinon, avec ton code, tu ne vas lire qu'une ligne de ton fichier.. car
http://www.cplusplus.com/reference/cstdio/fgets/
Dal
Je n'ai jamais fait d'implémentation de l'algorithme d'Huffman, mais comme personne ne répond, je te donne quelques indications qui me viennent à l'esprit.
Ma compréhension est que tu dois ici faire une première passe, puisque tu dis devoir décompter les fréquences correspondant exactement à ton texte.
Si je devais le faire, je le ferais avec un tableau de 256
struct Noeud(256 étant sur ma machine, la valeur de 2 élevé à la puissance
CHAR_BITtel que définie dans
limits.hsur mon implémentation), initialisé à 0, que tu utilises comme un tableau associatif, en utilisant en index le char à décompter.
Ensuite, tu te sers du contenu du tableau pour construire ton arbre, en utilisant les pointeurs vers les entrées du tableau associatif qui contiennent ton décompte...
cela paraît pas mal... non ? :-)
Sinon, avec ton code, tu ne vas lire qu'une ligne de ton fichier.. car
fgets()va s'arrêter au premier retour à la ligne trouvé...
http://www.cplusplus.com/reference/cstdio/fgets/
Dal
en créant ta "priority queue"