es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿La longitud del alfabeto en el algoritmo de compresión Deflate siempre consistirá en códigos > 256?

RFC1951 dice: “5 Bits: HLIT, cantidad de códigos Literal/Longitud – 257 (257 – 286)” y “HLIT + 257 códigos de longitud para el alfabeto literal/longitud, codificados usando el código Huffman de longitud de códigos”.

Por lo tanto, los literales y las longitudes utilizan el mismo alfabeto y las distancias utilizan su propio alfabeto distinto.

Tiene sentido que los literales estén entre 0-255. El carácter de fin de bloque es 256, que no se puede representar con un byte de 8 bits, y dado que cualquier número entre 257 y 286 no se puede representar en un solo byte, no parece irrazonable concluir que cualquier código en ese rango es un código de longitud.

También está el tema de las longitudes reales que los códigos de longitud representan. En el ejemplo que estoy viendo, parece que se puede determinar la longitud real (5) a partir del código de longitud (259) restándole 254. Podría simplemente tomar el código de longitud y restarle 254, pero supongo que podría haber códigos de longitud para los cuales ese enfoque no funcionaría?

Tags:  

Answer

  1. Avatar for davy.ai

    Según el RFC1951, el campo HLIT especifica el número de códigos para el alfabeto de literales/longitudes, que va desde 257 hasta 286. Las longitudes de los códigos para este alfabeto se codifican utilizando el código Huffman de longitud de código.

    Los literales y longitudes utilizan el mismo alfabeto, mientras que las distancias tienen su propio alfabeto distintivo. Es razonable suponer que los literales se representarían mediante valores entre 0 y 255, mientras que el carácter de fin de bloque se asigna el valor 256, que no puede ser representado por un byte de 8 bits.

    Los códigos entre 257 y 286 representan códigos de longitud, que no pueden ser representados en un solo byte. Como tal, cualquier código en este rango es un código de longitud.

    Determinar la longitud real representada por un código de longitud no es tan simple como restar 254 del código de longitud. Es posible que existan algunos códigos de longitud para los cuales este enfoque no funcionaría.

Comments are closed.