2010-06-21 6 views
7

Esta es una pregunta que me encontré en la configuración de la escuela, pero me sigue molestando, así que decidí preguntar aquí.Condición para código de bit único para un personaje en código Huffman?

En la compresión Huffman, las secuencias de longitud fija (caracteres) están codificadas con secuencias de longitud variable. La longitud de la secuencia del código depende de las frecuencias (o probabilidades) de los caracteres fuente.

Mi pregunta es: ¿cuál es la frecuencia de caracteres mínima más alta, con la que ese carácter será codificado por un solo bit?

Respuesta

5

Resulta que la respuesta es 0,4, es decir, si la frecuencia más alta p es p> = 0,4, está garantizada código de 1 bit para el carácter correspondiente. En otras palabras, esta es una condición suficiente.

También es cierto que p> = 1/3 es una condición necesaria. Es decir, puede haber ejemplos en los que 0.4> p> = 1/3, y el código más corto es 1 bit, pero no hay casos como este si p < 1/3.

La manera de razonar sobre eso es observar la forma en que se construye el árbol de códigos, en particular en las frecuencias de los 3 últimos subárboles supervivientes. Aparece una prueba en Johnsen, "On the redundancy of binary Huffman codes", 1980 (desafortunadamente este es un enlace de pago).

+1

Excepto por el caso binario trivial: si solo hay 2 símbolos, Huffman siempre asigna 1 bit a cada símbolo, sin importar las frecuencias. –

+0

Hay una prueba de esto incluido como apéndice en [esta preimpresión de arxiv] (https://arxiv.org/pdf/cs/0508039.pdf). Lamentablemente, no puedo seguir el razonamiento ... No entiendo por qué es necesariamente cierto que el nodo etiquetado "u" se fusionó antes que los nodos etiquetados como "v1" y "v2". –

7

En general, aproximadamente el 50% de la secuencia de símbolos entrantes debería consistir en un símbolo dado para que Huffman lo codificara como un solo bit. La razón de esto es que debido a cómo funciona la codificación de Huffman (la codificación de un símbolo no puede ser el prefijo de otro), al codificar un símbolo con un solo bit, se requiere que el primer bit para cada otro símbolo sea lo opuesto valor (es decir, si un símbolo está codificado como 0, todo lo demás debe comenzar con 1 más al menos un bit más). Como está eliminando la mitad del espacio de codificación posible para cualquier longitud de bit dada, necesita obtener una forma de codificar al menos la mitad de los símbolos que se ingresan para alcanzar el punto de equilibrio.

Tenga en cuenta que hay un caso especial en el que el espacio de símbolos solo consta de 3 símbolos. En tal caso, el símbolo que tenga la mayor frecuencia se codificará con 1 bit (ya que los otros dos serán las variaciones de 2 bit de cualquier valor de primer bit que no se elija) - si 2 o más tienen una probabilidad igualmente mayor, cualquiera de los dos podría estar codificado. Por lo tanto, en el caso de 3 símbolos es posible que un símbolo con, digamos, 34% de probabilidad pueda codificarse teóricamente como un solo bit (por ejemplo, 0) mientras que los otros dos pueden tener 33% o menores probabilidades y codificarse como 10 y 11.

Así que si está considerando todas las posibilidades de, entonces técnicamente cualquier cosa de 1/3 o superior podría codificarse como un solo bit (en el caso de 3 símbolos).

+0

Una excepción son 3 símbolos de igual probabilidad: se pueden codificar como 0, 10, 11 – Artelius

+0

Sí, ya estaba agregando eso como una nota. :) Es un caso marginal, pero potencialmente relevante. – Amber

+0

Existen otros casos relacionados (1/3, 1/6, 1/6, 1/6, 1/6) pero no es cierto para todos los casos en que un símbolo tiene una probabilidad de 1/3. Me encantaría ver una respuesta que muestre cuál es la distinción. – Artelius

Cuestiones relacionadas