Huffman编码可用于数据压缩已经是人所共知的事实。但是具体说到如何实现编码,至少作者在实验中是遇到问题了的!
对数值串:
[22006 22006 44004 87999 175989] --1*5
进行huffman编码,下面左列是要编码的数值,右列是编码结果。
22006 [1]
44004 [0 0 1]
87999 [0 0 0]
175989 [0 1]
则原数值列的编码结果为:
[1 1 0 0 1 0 0 0 0 1] -- 1*10
到这里为止应该没什么问题!
在进行压缩比的计算时,必须考虑Matlab(或者其他你处理数据的平台)中数据类型的问题。
比如:【数据类型】【占用存储】【数值范围】
uint8 8bit 0~255
uint16 16bit 0~65525
int8 8bit -128~127
int16 16bit -32768~32767
…
!matlab中是没有bit类型的,也就是说,即使是编码结果(0-1串),最少也需要占用10*sizeof(uint8) = 80bit.
而原数据需要的存储空间为5*sizeof(uint16) = 80bit. 可以看到:完全没有实现数据压缩。
当然,作为Huffman编码结果的0-1串如果能实现按位存储,那么毫无疑问地会节省存储空间&#x