50 lines
1.4 KiB
C
50 lines
1.4 KiB
C
#ifndef __FREQ_H__
|
|
#define __FREQ_H__
|
|
|
|
#include <stdlib.h>
|
|
|
|
#define TRUE 1
|
|
#define FALSE 0
|
|
#define NUM_CHARS 256
|
|
|
|
// structure représentant un sommet d'un arbre de Huffman
|
|
typedef struct Vertex Vertex;
|
|
struct Vertex {
|
|
// le double `freq` indique la fréquence d'apparition de la lettre
|
|
// du sommet dans le corpus, ou bien la somme des fréquences de ses fils
|
|
double frequency;
|
|
|
|
// le caractère `value` est le caractère du corpus que ce sommet
|
|
// représente (caractère ASCII 0 - 255)
|
|
char value;
|
|
|
|
// pointe vers le sommet parent à celui-ci, ou NULL s'il n'a pas de parent,
|
|
// comme par exemple pour la racine et les sommets en cours de traitement
|
|
Vertex* parent;
|
|
|
|
// pointe vers les deux enfants de ce sommet, ou NULL s'il n'a pas
|
|
// d'enfants, comme par exemple pour les feuilles
|
|
Vertex *child_l, *child_r;
|
|
};
|
|
|
|
// structure représentant un arbre de Huffman
|
|
typedef struct Tree Tree;
|
|
struct Tree {
|
|
// quantité de sommets dans l'arbre. Le tableau des sommets contient
|
|
// exactement `size` éléments
|
|
size_t size;
|
|
|
|
// tableau contenant les sommets de l'arbre, liés à leur parent,
|
|
// excepté pour la racine
|
|
Vertex* vertices;
|
|
};
|
|
|
|
// calcule un tableau des fréquences des caractères dans le corpus,
|
|
// indexé par la valeur numérique ASCII de chaque caractère
|
|
double* computeFrequencies(const char* filepath);
|
|
|
|
// déduit d'un tableau de fréquences de caractères un arbre de Huffman
|
|
Tree buildTree(double* frequencies);
|
|
|
|
#endif
|