¿Cómo realizo la codificación de huffman usando lista enlazada?

La codificación de Huffman es un algoritmo de compresión de datos sin pérdidas. La idea es asignar códigos de longitud variable para ingresar caracteres, las longitudes de los códigos asignados se basan en las frecuencias de los caracteres correspondientes.

El carácter más frecuente obtiene el código más pequeño y el carácter menos frecuente obtiene el código más grande.
Los códigos de longitud variable asignados a los caracteres de entrada son códigos de prefijo, significa que los códigos (secuencias de bits) se asignan de tal manera que el código asignado a un carácter no es el prefijo del código asignado a ningún otro carácter. Así es como Huffman Coding se asegura de que no haya ambigüedad al decodificar el flujo de bits generado.
Comprendamos los códigos de prefijo con un ejemplo de contador. Supongamos que hay cuatro caracteres a, b, cyd, y sus códigos de longitud variable correspondientes son 00, 01, 0 y 1. Esta codificación conduce a la ambigüedad porque el código asignado a c es el prefijo de los códigos asignados a a y b. Si el flujo de bits comprimido es 0001, la salida descomprimida puede ser “cccd” o “ccb” o “acd” o “ab”.

Hay principalmente dos partes principales en Huffman Coding
1) Construye un árbol Huffman a partir de los caracteres de entrada.
2) Atraviesa el Árbol Huffman y asigna códigos a los personajes.

Pasos para construir Huffman Tree
La entrada es una matriz de caracteres únicos junto con su frecuencia de ocurrencias y la salida es Huffman Tree.

1. Cree un nodo hoja para cada carácter único y cree un montón mínimo de todos los nodos hoja (El montón mínimo se usa como una cola de prioridad. El valor del campo de frecuencia se usa para comparar dos nodos en el montón mínimo. Inicialmente, el carácter menos frecuente está en la raíz)

2. Extraiga dos nodos con la frecuencia mínima del montón mínimo.

3. Cree un nuevo nodo interno con una frecuencia igual a la suma de las frecuencias de los dos nodos. Haga el primer nodo extraído como su hijo izquierdo y el otro nodo extraído como su hijo derecho. Agregue este nodo al montón mínimo.

4. Repita los pasos 2 y 3 hasta que el montón contenga solo un nodo. El nodo restante es el nodo raíz y el árbol está completo.

Código fuente con ejemplo en: Algoritmos codiciosos | Set 3 (Codificación Huffman) – GeeksforGeeks

Espero que ayude 🙂

More Interesting

¿Cuáles son los mejores algoritmos híbridos para el filtrado colaborativo y basado en contenido?

¿Cuáles son los algoritmos más importantes y ampliamente utilizados para leer sobre criptografía?

Cómo escribir un algoritmo para la suma de n factoriales. es decir, 1! +2! +3! +… (N-1) + n

¿Por qué los temas 'estructura de datos' y 'algoritmo' siempre están conectados? ¿Hay un curso o libro que solo se ocupe de la estructura de datos?

¿Qué algoritmo se puede usar para pasar de datos de frecuencia a una nota musical?

¿Qué harías? ¿Cuál hubiera sido tu estrategia si hubieras tenido la oportunidad de volver a comenzar la programación de aprendizaje?

En programación, ¿un generador de números aleatorios es realmente aleatorio? ¿O son los números aleatorios generados por un algoritmo oculto?

¿Cuáles son algunos de los diferentes casos que debería considerar usar matrices bidimensionales sobre matrices unidimensionales en Java?

¿Cuál es la mejor manera de aprender estructuras de datos y algoritmos para estudiantes que no son de CS / IT?

¿Cómo se realiza la detección en el procesamiento de imágenes?

¿Cómo atravesar una matriz desde una posición dada vertical u horizontal o diagonalmente para encontrar un elemento en C ++? ¿Podría proporcionar un código de muestra?

¿Qué hace que Google sea poderoso? ¿Son los datos que tienen o el algoritmo eficiente que desarrollan?

Para el siguiente algoritmo sea n = 0. Para cada persona en la sala, establezca n = n + 1 '. ¿Dónde exactamente explica el algoritmo que compones n?

¿Cuál es el algoritmo para el deporte de fantasía diario?

¿Cuál es el algoritmo más optimizado para encontrar la suma de la diferencia absoluta de cada par distinto en una matriz entera?