¿Cómo demostramos que el algoritmo de codificación de Huffman es óptimo?

El algoritmo de codificación de Huffman fue desarrollado por David Huffman como parte de su tarea en el MIT.

La optimización (solo para un conjunto particular de probabilidades, es decir, para un modelo dado) de este algoritmo puede probarse considerando las siguientes dos comprobaciones que siempre son válidas al codificar utilizando el algoritmo Huffman:

1.) En un código óptimo, los símbolos que ocurren con mayor frecuencia (tienen una mayor probabilidad de ocurrencia) tendrán palabras de código más cortas que los símbolos que ocurren con menos frecuencia.

Prueba :

¡La prueba se explica por sí sola aquí! Por un lado, tenemos esta observación (o verificación) de que los símbolos más frecuentes tienen códigos más pequeños y viceversa. Por lo tanto, un código que asigna palabras de código más largas a los símbolos que ocurren con mayor frecuencia no puede ser óptimo. Por lo tanto, el algoritmo de Huffman es óptimo.

2.) En un código óptimo, los dos símbolos que ocurren con menos frecuencia tendrán la misma longitud.

Prueba :

Estamos demostrando este punto utilizando el principio de contradicción.

Supongamos que existe un código óptimo en el que las dos palabras de código correspondientes a los dos símbolos menos probables son diferentes. Entonces, digamos, la palabra de código más larga (Código2) es k bits más larga que la palabra de código más corta (Código1):

Como se trata de un código de prefijo, la palabra de código más corta no puede ser un prefijo de la palabra de código más larga. Esto significa que incluso si dejamos caer los últimos k bits de la palabra de código más larga, las dos palabras de código seguirían siendo distintas.

Como estas palabras de código corresponden a los símbolos menos probables del alfabeto, ninguna otra palabra de código puede ser más larga que estas palabras de código; por lo tanto, no hay peligro de que la palabra de código acortada se convierta en el prefijo de alguna otra palabra de código. Además, al soltar estos k bits obtenemos un nuevo código que tiene una longitud promedio más corta que el anterior. Pero esto viola nuestra discusión inicial. Por lo tanto, para un código óptimo, la segunda observación también es cierta.

¡Espero eso ayude!

Fuente: Libro “Compresión de datos” por Khalid Sayood

http://rahilshaikh.weebly.com/up…

El algoritmo de codificación de Huffmann es un algoritmo codicioso eficiente, en cada etapa construye un árbol binario de prefijo (basado en la frecuencia de los caracteres) y finalmente encuentra la solución óptima para comprimir el código.
Por lo tanto, es un algoritmo de compresión eficiente.

More Interesting

¿En qué lenguaje de programación están escritos los algoritmos de aprendizaje automático de Google: C ++ o Java? ¿Por qué?

¿De qué se trata el algoritmo Google Hawk?

Dado un gran diccionario de N frases cortas (1 o 2 términos) y una gran porción de texto, ¿puedo encontrar de manera eficiente las coincidencias para esas frases en el texto en tiempo sub-N, mientras perdono * los pequeños errores?

¿Cómo un programa de razonamiento poco preciso asigna 8 gb de memoria en 3 segundos?

¿Cómo se creó el 'algoritmo' de la evolución biológica?

Cómo escribir un código para un árbol en estructuras de datos

¿Cuál es el mejor algoritmo para sumar números en matrices anidadas?

Cómo saber si / cuándo puede aplicar la manipulación de bits para resolver un problema

¿No es posible en un árbol de búsqueda binario que el sucesor de un elemento tenga más de un hijo?

¿Cuáles son algunos proyectos que podrían realizarse utilizando estructuras de datos?

¿Cuál es el código C ++ más simple para el algoritmo A *?

Cómo comparar dos algoritmos de recomendación en términos de problema de cola larga

Cómo declarar un conjunto de cadenas de tamaño desconocido para obtenerlo del usuario sin usar la función de asignación en C

La mayoría de las definiciones / teoremas / ejemplos de privacidad diferencial que he encontrado son para consultas que devuelven un solo número por columna, como un promedio. ¿Existen mecanismos diferencialmente privados para otros tipos de consultas, como los que subconjustan filas en función de algún criterio?

¿Qué algoritmo es usado por la función Java () de la búsqueda de subcadenas?