我试图理解霍夫曼编码是如何工作的,它应该压缩数据以获取比实际文本更少的内存但是当我编码时例如
"Text to be encoded"
18 字符,我得到的结果是
"100100110100101110101011111000001110011011110010101100011"
我是否应该将这些结果位除以8
,因为字符有8
位?
答案 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-bit
(0..127
范围Ascii表),则压缩后我们有 9 个字符:
after: 1001001 'I'
1010010 'R'
1110101 'u'
0111110 '>'
0000111 '\0x07'
0011011 '\0x1B'
1100101 'e'
0110001 'l'
0000001 '\0x01'