【问题标题】:Why is huffman encoded text bigger than actual text?为什么霍夫曼编码的文本比实际文本大?
【发布时间】:2018-01-08 21:56:50
【问题描述】:

我试图了解霍夫曼编码的工作原理,它应该压缩数据以比实际文本占用更少的内存,但是当我编码时

"Text to be encoded" 

其中有 18 个字符我得到的结果是

"100100110100101110101011111000001110011011110010101100011"

我应该将这些结果位除以8,因为字符有8 位吗?

【问题讨论】:

  • 实际结果是10010011 01001011 10101011 11100000 11100110 11110010 10110001 00000001 - 8 ASCII 字符(从技术上讲,您不应该 8,而是 group 按 8 位块)。更准确的是压缩前的"Text to be encoded" == 18 * 8 = 144 bits 和压缩后的57
  • “要编码的文本”是一个字符串。未压缩字符串中的每个字符由一个 8 位 ASCII 字符表示,使总的未压缩字符串为 18*8=144 位。霍夫曼码是 57 位。

标签: algorithm huffman-code


【解决方案1】:

您应该比较 same 单位(bits 与压缩之后的或 characters 与之前的文本相同),例如

before: "Text to be encoded" == 18 * 8 bits = 144 bits
                             == 18 * 7 bits = 126 bits (in case of 7-bit characters)
after:  100100110100101110101011111000001110011011110010101100011 = 57 bits

所以压缩前有 144(或 126)位,压缩后有 57 位。或者

before: "Text to be encoded" == 18 characters
after:   10010011 
         01001011
         10101011
         11100000
         11100110
         11110010
         10110001
         00000001 /* the last chunk is padded */ == 8 characters 

所以压缩前有 18 个 ascii 字符,压缩后只有 8 个一字节字符。如果字符应该是 7-bit0..127 范围 Ascii 表),我们在压缩后有 9 个字符:

after:  1001001 'I'
        1010010 'R'
        1110101 'u'
        0111110 '>'
        0000111 '\0x07'
        0011011 '\0x1B'
        1100101 'e'
        0110001 'l'
        0000001 '\0x01'

【讨论】:

  • "only 8 ascii characters after" --> 更像是 8 个 bytes,因为 ASCII 只为值 0-127 定义。
  • 这是我一直在寻找的答案。谢谢。
猜你喜欢
  • 1970-01-01
  • 2011-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-17
相关资源
最近更新 更多