¿Cuál sería la diferencia entre el sistema de codificación de Huffman y el LZW?

Me gustaría saber más o menos en que se diferencian estos dos sistemas de codificación

1 Respuesta

Respuesta
2
En esencia, LZW trata de la frecuencia de repeticiones y Huffman trata de la frecuencia de ocurrencia de un solo byte.
Tome la cadena 123123123.
(La siguiente es una simplificación excesiva pero aclarará el punto) LZW identificará que 123 se repite tres veces y, en esencia, creará un diccionario de códigos para las secuencias. Esencialmente decir cuando digo A, quiero decir que 123 aquí es AAA (o tres bytes).
Huffman detectará la frecuencia de bytes (supongamos que el texto anterior es ASCII o UTF-8 (que hará que ABC sea un punto de código de un solo byte), entonces A = 3, B = 3, C = 3 y no hay otros elementos, así que puedo usar 1.5 bits (bien un combo de 1 y 2 bits) para representar todos los caracteres. Así que digamos A = 0, B = 10, C = 11. Huffman codificará el texto ABCABCABC como (en bits) 010110101101011 (o 15 bits) o dado que generalmente estamos limitados a bytes de 2 bytes.
¿Qué pasa si usamos a Huffman en el resultado de LZW?
Bueno, AAA se puede representar con un solo bit (Vamos a elegir 0) por lo que 000 (3 bits o 1 byte redondeando hacia arriba).
La parte desafortunada aquí es que Huffman y LZW requieren cierta información para decodificar, por lo que no será tan increíble como enviar un 0 y decir ir decodificar con Huffman, luego LZW, pero en esencia esta combinación da como resultado muy buenos resultados de compresión con real -World payloads que aún no están comprimidos (Un archivo JPG o ZIP es poco probable que sea compresible con esto, pero un archivo .docx, xml doc, txt, etc. (cuanto más largo y prolijo y más repetitivo mejor) hará. !
Si observa las características de los algoritmos y conoce los datos, verá que el orden de los algoritmos y la repetición pueden marcar la diferencia. Piense en un documento de 1TB en tamaño de todas las "A" y aplique lo anterior y piense qué haría mejor. Francamente, un SimpleByteUsageEncoder ingenuo haría mejor ya que la información mínima aquí es qué char cuántas veces. Huffman alcanzaría un máximo de aproximadamente 1/8 (1 byte a un bit) LZW haría muuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuch Sin embargo, si tuviera un documento con una posible permutación de una secuencia de letras, generalmente Huffman lo haría mejor. Creo que si piensas detenidamente sobre esto, reconocerás que LZW generalmente es más útil, pero los combos a menudo obtienen mejores resultados (suponiendo que tu objetivo sea el tamaño más pequeño, no el mejor rendimiento).

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas