huffman/src/huf.c

51 lines
1.1 KiB
C

#include "../include/huf.h"
#include <stdlib.h>
#include <stdio.h>
double* computeFrequencies(const char* filepath) {
double* frequencies = (double*) malloc(256 * sizeof(double));
int totalChars = 0;
// initialisation du tableau à 0
for (int i = 0; i < 256; i++) {
frequencies[i] = 0;
}
// parcours du fichier et comptage des caractères
FILE* file = fopen(filepath, "r");
char current;
while ((current = fgetc(file)) != EOF) {
frequencies[(size_t) current]++;
totalChars++;
}
// conversion des effectifs en fréquences
for (int i = 0; i < 256; i++) {
frequencies[i] /= totalChars;
}
return frequencies;
}
Vertex* buildTree(double* frequencies) {
int vertexCount = 0;
// on compte le nombre de sommets à allouer
// (uniquement les caractères qui apparaissent au moins une fois)
for (int i = 0; i < 256; i++) {
if (frequencies[i] > 0) {
vertexCount++;
}
}
// on alloue la place pour 2n + 1 sommets (nombre total
// de sommets dans l'arbre binaire)
Vertex* tree = (Vertex*) malloc((2 * vertexCount - 1) * sizeof(Vertex));
// (à faire: algo pour remplir l'arbre)
// (trier le tableau des fréquences ?)
return tree;
}