Aleph-w  1.5a.2
Biblioteca general de algoritmos y estructuras de datos
 Todo Clases Archivos Funciones Variables 'typedefs' Enumeraciones Amigas Grupos Páginas
Referencia de la Clase Aleph::Huffman_Encoder_Engine

#include <Huffman.H>

Métodos públicos

 Huffman_Encoder_Engine ()
 Constructor de codificador.
 
void save_tree (ofstream &output)
 
void save_tree_in_array_of_chars (const string &array_name, ofstream &output)
 
BinNode< string > *& get_root ()
 Retorna la raíz del árbol decodificador de Huffman.
 
BinNode< string > * generate_huffman_tree (const bool &with_freqs=false)
 
void load_tree (ifstream &input)
 
Freq_Node *& get_freq_root ()
 Retorna la raíz de un árbol de frecuencias.
 
void set_freq (const string &str, const size_t &freq)
 
void read_input (char *input, const bool &with_freqs=false)
 
void read_input (ifstream &input, const bool &with_freqs=false)
 
void set_end_of_stream (const string &str)
 Define el símbolo fin de entrada.
 
size_t encode (char *input, BitArray &bit_stream)
 
size_t encode (ifstream &input, BitArray &bit_stream)
 

Descripción detallada

Codificador de Huffman.

Ver también
Huffman_Decoder_Engine

Documentación de las funciones miembro

size_t Aleph::Huffman_Encoder_Engine::encode ( char *  input,
BitArray bit_stream 
)
inline

Codifica el texto input.

encode(input,bit_stream) lee la entrada input, la codifica y escribe el texto codificado en el arreglo de bits bit_stream.

Parámetros
[in]inputcadena de caracteres contentiva del texto a codificar.
[out]bit_streamel arreglo de bits donde escribir el texto codificado.
Devuelve
la longitud de total del texto codificado.
Excepciones
domain_errorsi el árbol de prefijos no ha sido generado mediante el método generate_huffman_tree()

Hace referencia a Aleph::DynMapTree< Key, Data, Tree, Compare >::find() y Aleph::BitArray::size().

+ Gráfico de llamadas para esta función:

size_t Aleph::Huffman_Encoder_Engine::encode ( ifstream &  input,
BitArray bit_stream 
)
inline

Codifica el texto input.

encode(input,bit_stream) lee la entrada input, la codifica y escribe el texto codificado en el arreglo de bits bit_stream.

Parámetros
[in]inputarchivo con los caracteres del texto a codificar.
[out]bit_streamel arreglo de bits donde escribir el texto codificado.
Devuelve
la longitud de total del texto codificado.
Excepciones
domain_errorsi el árbol de prefijos no ha sido generado mediante el método generate_huffman_tree()

Hace referencia a Aleph::DynMapTree< Key, Data, Tree, Compare >::find() y Aleph::BitArray::size().

+ Gráfico de llamadas para esta función:

BinNode<string>* Aleph::Huffman_Encoder_Engine::generate_huffman_tree ( const bool &  with_freqs = false)
inline

Genera el árbol de prefijos de Huffman.

generate_huffman_tree(with_freqs) ejecuta el algoritmo de Huffman para generar el árbol de prefijos en función del texto leído. Si with_freqs es true, entonces los nodos del árbol generado contienen las frecuencias de aparición de los símbolos.

Parámetros
[in]with_freqssi el valor es true, entonces los nodos del árbol generado contendrán las frecuencias de aparición de los símbolos. De lo contrario, el árbol sólo contiene los símbolos.
Devuelve
la raíz del árbol binario de prefijos. Este árbol binario es el decodificador y es entrada de la clase Huffman_Decoder_Engine.
Excepciones
bad_allocsi no hay suficiente memoria.
Ver también
build_prefix_encoding Huffman_Decoder_Engine

Hace referencia a Aleph::GenBinHeap< NodeType, Key, Compare >::getMin(), Aleph::GenBinHeap< NodeType, Key, Compare >::insert(), LLINK, RLINK y Aleph::GenBinHeap< NodeType, Key, Compare >::size().

Referenciado por read_input().

+ Gráfico de llamadas para esta función:

+ Gráfico de llamadas a esta función:

void Aleph::Huffman_Encoder_Engine::load_tree ( ifstream &  input)
inline

Carga y construye un árbol binario desde un archivo.

load_tree(input) lee el archivo referenciado por input, el cual contiene un árbol de Huffman previamente guardado con Huffman_Encoder_Engine::save_tree() y lo restaura en memoria.

Parámetros
[in]inputreferencia al archivo donde se encuentra guardado el árbol bina1rio.
Excepciones
std::bad_allocsin no hay suficiente para construir arreglo de bits intermedio o para construir el árbol binario.
Ver también
load_tree() Huffman_Encoder_Engine::save_tree()

Hace referencia a Aleph::destroyRec().

+ Gráfico de llamadas para esta función:

void Aleph::Huffman_Encoder_Engine::read_input ( char *  input,
const bool &  with_freqs = false 
)
inline

Lee una cadena caracteres, contabiliza las frecuencias de sus distintos símbolos y genera el árbol binario de prefijos.

read_input(input, with_freqs) lee la cadena de caracteres input, contabiliza las frecuencias de aparición de cada símbolo y finalmente genera el árbol binario de prefijos.

Parámetros
[in]inputcadena de caracteres a codificar.
[in]with_freqssi el valor es true, entonces también se genera el árbol de prefijos con las frecuencias en cada símbolo.
Excepciones
bad_allocsi no hay suficiente memoria.

Hace referencia a generate_huffman_tree() y set_end_of_stream().

+ Gráfico de llamadas para esta función:

void Aleph::Huffman_Encoder_Engine::read_input ( ifstream &  input,
const bool &  with_freqs = false 
)
inline

Lee un archivo, contabiliza las frecuencias de sus distintos símbolos y genera el árbol binario de prefijos.

read_input(input, with_freqs) lee el archivo de entrada input, contabiliza las frecuencias de aparición de cada símbolo y finalmente genera el árbol binario de prefijos.

Parámetros
[in]inputarchivo contentivo de los caracteres a codificar.
[in]with_freqssi el valor es true, entonces también se genera el árbol de prefijos con las frecuencias en cada símbolo.
Excepciones
bad_allocsi no hay suficiente memoria.

Hace referencia a generate_huffman_tree() y set_end_of_stream().

+ Gráfico de llamadas para esta función:

void Aleph::Huffman_Encoder_Engine::save_tree ( ofstream &  output)
inline

Guarda un árbol de Huffman en un archivo.

Guarda el árbol de Huffman correspondiente al texto codificado en un archivo.

El método utilizado es a través del código prefijo en bits del árbol y luego la secuencia prefija de las hojas del árbol correspondientes a los símbolos del texto.

Parámetros
[out]outputun stream correctamente abierto donde se guarda el árbol.
Excepciones
std::domain_errorsi el árbol aún no ha sido generado.
Ver también
Huffman_Decoder_Engine::load_tree() save_tree() load_tree()
void Aleph::Huffman_Encoder_Engine::save_tree_in_array_of_chars ( const string &  array_name,
ofstream &  output 
)
inline

Genera declaraciones de arreglos de bits y de claves para un árbol de Huffman.

save_tree_in_array_of_chars(array_name, output) genera declaraciones para dos arreglos con los que se puede definir un árbol binario. Las declaraciones son escritas en un archivo texto, ya abierto, direccionado por el stream output. La declaración resultante tiene la forma genérica siguiente:

const unsigned char array_name_cdp[n] = { lista de unsigned char };

const char * array_name_k[] = { lista de claves en prefijo };

El primer arreglo es de bits y guarda la topología del árbol bajo un código prefijo de bits (una palabra de Lukasiewicz). El segundo arreglo, guarda los contenidos de los nodos y está ordenado en la secuencia prefija. Los valores de las claves son dados por la clase Get_Key()(root, str) el cual debe retornar una constante char* que represente el contenido del nodo.

La clase Get_Key()(), observadora del contenido del nodo, debe ser muy cuidadosamente programada. Su estructura general es la siguiente:

string operator() (Node * p) const;

Donde p es el nodo actual dentro del recorrido prefijo del árbol binario. El resultado de esta llamada es colocado como valor constante del arreglo array_name.

Parámetros
[in]array_nameEl nombre del arreglo de contenidos de los nodos del árbol
[out]outputstream abierto donde se escriben las declaraciones de los arreglos, así como sus valores.
[out]outputun stream correctamente abierto donde se guarda el árbol.
Excepciones
std::domain_errorsi el árbol aún no ha sido generado.
Ver también
Huffman_Encoder_Engine::load_tree() save_tree_in_array_of_chars()
void Aleph::Huffman_Encoder_Engine::set_freq ( const string &  str,
const size_t &  freq 
)
inline

Define la frecuencia de aparición de un símbolo.

set_freq(str, freq) instruye al codificador que al símbolo str se le asocia una frecuencia de aparición freq.

Parámetros
[in]strsímbolo.
[in]freqfrecuencia del símbolo
Excepciones
bad_allocsi no hay suficiente memoria.

Hace referencia a Aleph::DynMapTree< Key, Data, Tree, Compare >::insert(), Aleph::GenBinHeap< NodeType, Key, Compare >::insert() y Aleph::DynMapTree< Key, Data, Tree, Compare >::test().

+ Gráfico de llamadas para esta función:


La documentación para esta clase fue generada a partir del siguiente fichero:

Leandro Rabindranath León