huffman/include/huf.h

44 lines
1.2 KiB
C

#ifndef __FREQ_H__
#define __FREQ_H__
#include <stdlib.h>
#define TRUE 1
#define FALSE 0
#define NUM_CHARS 256
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;
// les sommets virtuels sont ceux qui ne correspondent pas à une lettre
// du corpus, mais chapeautent les autres sommets
int is_virtual;
// 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;
};
typedef struct Tree Tree;
struct Tree {
size_t size;
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 du tableau de fréquences l'arbre de Huffman, représenté
// par une liste de sommets chaînés
Tree buildTree(double* frequencies);
#endif