为什么霍夫曼编码的文本比实际文本更大?

时间:2018-01-08 21:56:50

标签: algorithm huffman-code

我试图理解霍夫曼编码是如何工作的,它应该压缩数据以获取比实际文本更少的内存但是当我编码时例如

"Text to be encoded" 

18 字符,我得到的结果是

"100100110100101110101011111000001110011011110010101100011"

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

1 个答案:

答案 0 :(得分:4)

您应该比较相同的单位(,如在compession之后或字符,如之前的文本),例如

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'