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é.
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