Fragmento del codificador Huffman de miniz: compresion DEFLATE en C

Fuentes: miniz tdefl Huffman encoder: canonical code construction in C

El archivo forma parte del modulo compresor (tdefl) de la libreria miniz, una reimplementacion en un solo archivo de zlib escrita en C por Rich Geldreich. El fragmento muestra la construccion de tablas de codigos Huffman canonicos, una pieza central del algoritmo DEFLATE empleado en formatos como ZIP, gzip y PNG.

El codigo define constantes del compresor, entre ellas un tamano de buffer LZ de 64 KiB, un tamano de diccionario de 32 768 bytes y un maximo de 288 simbolos Huffman en el bloque literal/longitud, coherentes con el formato DEFLATE. Se incluye tambien un limite maximo de longitud de codigo Huffman de 32 bits.

La funcion tdefl_radix_sort_syms ordena las frecuencias de simbolos mediante un radix sort de dos pasadas sobre bytes, una tecnica estable y eficiente para enteros pequenos. A continuacion, tdefl_calculate_minimum_redundancy aplica el algoritmo de construccion del arbol de Huffman con minima redundancia, partiendo de un bosque de nodos hoja con sus frecuencias y fusionandolos hasta obtener un unico arbol.

Por ultimo, tdefl_huffman_enforce_max_code_size reajusta la distribucion de longitudes para que ninguna supere el maximo permitido por el formato, desplazando codigos hacia longitudes menores cuando es necesario. El conjunto permite emitir bloques Huffman canonicos validos compatibles con cualquier decodificador DEFLATE estandar.