Una implementación en Python del algoritmo de codificación Huffman para la compresión de datos sin pérdida. Este proyecto incluye herramientas para calcular probabilidades de símbolos, construir árboles de Huffman, codificar/decodificar texto y medir la eficiencia de la compresión mediante la entropía y la longitud de bits promedio.
Características
- Análisis de Frecuencia: Calcula automáticamente la probabilidad de cada carácter en una cadena dada.
- Construcción de Árboles: Visualiza la formación paso a paso del Árbol de Huffman utilizando una cola de prioridad.
- Codificación y Decodificación: Comprime texto en una cadena binaria y reconstruye el mensaje original sin pérdida de datos.
- Análisis de Métricas: Calcula la Entropía teórica y la Longitud Promedio (bits por símbolo) para evaluar la eficiencia.
Stack Tecnológico
- Lenguaje: Python 3.x
- Librerías: heapq (Cola de prioridad), math (Cálculos logarítmicos)
Configuración
- Clona el repositorio:
git clone https://github.com/Eduu64/HuffmanScript.git
- Navega al directorio del proyecto:
cd huffman-compressor
- Asegúrate de tener Python instalado. No se requieren dependencias externas.
Uso
Ejecuta el script directamente para ver un ejemplo de compresión y cálculo de métricas:
python huffman_main.py
Ejemplo de Código
texto = "aaaabbcd"
arrayletras, arrayprobs = calcular_probabilidad_letras(texto)
# Construir el árbol y generar códigos
arbol = arbolHuffman(arrayletras, arrayprobs)
huffman_codes = codigoHuffman(arbol)
# Comprimir y descomprimir
comprimido = compresor(huffman_codes, texto)
decomprimido = descompresor(huffman_codes, comprimido)
Estructura del Proyecto
- Nodo: Clase que representa un nodo en el Árbol de Huffman.
- calcular_probabilidad_letras: Filtra el texto y computa las frecuencias de los caracteres.
- arbolHuffman: Implementa el algoritmo "greedy" para construir el árbol binario óptimo.
- codigoHuffman: Recorre el árbol para asignar códigos binarios libres de prefijo.
- compresor / descompresor: Funciones para manejar la conversión del flujo de bits.
- calculo_entropia / longitud_media: Funciones de utilidad para análisis estadístico.