Module Huffman

module Huffman: sig .. end
L'algorithme de Huffman.

type symbol = int 
Symboles avec lesquels sont écrits les textes que l'on souhaite compresser/décompresser.
type plain_text = symbol MyStream.t 
Texte en clair. (Flot d'octets.)
type cipher_text = bool MyStream.t 
Texte compressé. (Flot de bits.)
type encoding_dictionary 
Dictionnaire d'encodage.
type decoding_dictionary 
Dictionnaire de décodage.

Dictionnaires


val dictionaries_from_text : plain_text ->
int * encoding_dictionary * decoding_dictionary
À partir d'un texte en clair, on renvoie le nombre de symbole du texte ainsi que les dictionnaires d'encodage et de décodage. En particulier, la taille maximale du fichier à compresser est stockée dans un entier positif, donc ne doit pas dépasser 2^(Sys.word_size - 1) -1 , soit un peu plus de 2,1 Go pour une architecture 32 bits, et plus de 9,2 millions de To pour une architecture 64 bits.

Encodage / Décodage de symboles


val encode_symbol : encoding_dictionary -> symbol -> cipher_text
Étant donné un dictionnaire d'encodage d, l'appel encode_symbol d renvoie l'écriture compressée d'un symbole donné.
val decode_symbol : decoding_dictionary ->
cipher_text -> symbol * cipher_text
Étant donné un dictionnaire de décodage d, l'appel decode_symbol d renvoie le premier symbole d'un texte compressé et le reste du texte compressé.

Insérer/Extraire un dictionnaire de décodage


val push_decoding_dictionary : decoding_dictionary -> int MyStream.t -> int MyStream.t
Le dictionnaire de décodage passé en premier argument est « sérialisé », c'est-à-dire encodé sous la forme d'un flot d'octets, qui est alors placé en préambule du flot d'octets passé en second argument.
val pop_decoding_dictionary : int MyStream.t -> decoding_dictionary * int MyStream.t
Le préambule du contenu du flot d'octets passé en argument est extrait pour récupérer le dictionnaire d'encodage. Ce dernier est renvoyé avec le reste du flot d'octets. L'argument passé à cette fonction doit donc avoir été généré par la fonction push_decoding_dictionary. Dans le cas contraire, le résultat est imprévisible et non spécifié.

Retour à la page du TD8