如何解码没有前缀 属性 的霍夫曼编码
How to decode a huffman coding without the prefix property
我正在尝试解码使用 Modified Huffman Coding 编码的缓冲区。
这里是缓冲区的开头:000111100001111011111010001000011101000011101000011110
从 translation table 来看,Modified Huffman 所需的前缀 属性 似乎无法保证。根据table,我看到00011
表示7B
,但000111
表示1W
。在这种情况下,如何解码上面的缓冲区?我读的 table 是错误的还是我遗漏的算法有一些细微差别?
改进的霍夫曼编码使用白色和黑色像素的交替编码。编码总是以白色像素开始。因此,在您的示例中,缓冲区解码为 000111=1W
、10=3B
、000111=1W
等。
修改后的霍夫曼编码假定您从 运行 个白色像素开始,如您 link 中的翻译 table 中所述。如果不是,则使用 运行 个“0”白色像素的代码。
00110101 = 0W
000111 = 1W
and so on...
在您的示例中,您从 1W 000111
开始,然后是 3B 10
等等...
正如约翰所指出的,您的翻译 table 是错误的。
可以在这里找到正确的 table:Correct Modified Huffman Coding Translation Table
我正在尝试解码使用 Modified Huffman Coding 编码的缓冲区。
这里是缓冲区的开头:000111100001111011111010001000011101000011101000011110
从 translation table 来看,Modified Huffman 所需的前缀 属性 似乎无法保证。根据table,我看到00011
表示7B
,但000111
表示1W
。在这种情况下,如何解码上面的缓冲区?我读的 table 是错误的还是我遗漏的算法有一些细微差别?
改进的霍夫曼编码使用白色和黑色像素的交替编码。编码总是以白色像素开始。因此,在您的示例中,缓冲区解码为 000111=1W
、10=3B
、000111=1W
等。
修改后的霍夫曼编码假定您从 运行 个白色像素开始,如您 link 中的翻译 table 中所述。如果不是,则使用 运行 个“0”白色像素的代码。
00110101 = 0W
000111 = 1W
and so on...
在您的示例中,您从 1W 000111
开始,然后是 3B 10
等等...
正如约翰所指出的,您的翻译 table 是错误的。 可以在这里找到正确的 table:Correct Modified Huffman Coding Translation Table