首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

请教个LZW中的有关问题

2012-07-18 
请问个LZW中的问题如果在LZW中,用11个bit表示编码,比如分别用11111111111与00000000001表示两个字符串,那

请问个LZW中的问题
如果在LZW中,用11个bit表示编码,比如
分别用11111111111与00000000001表示
两个字符串,那么在压缩时,这两个字符串
是用4个字节表示呢(每个字符串都用2个字节
表示),还是把这两个11位的bit再进行整合成
3个字节的?如果是再整合,那么是怎么样整合,
是高字节与高字节整合还是高字节与低字节整合?

[解决办法]
你可以将压缩后的数据看成一个bit流,每个字典字符串对应的x个bit添加到那个流的末尾。

所以你说的情况就是将11个bit和11个bit连续的放在一起,共22个连续bit,它们可能横跨了3个字节,也可能横跨了4个字节。

横跨3个字节可能的方式:……|11111111|11100000|000001……
横跨4个字节可能的方式:……1|11111111|11000000|00001……

解压的时候也是边构造字典,边解压,读bit流,有时候需要读某个长度(例如11个长度)的bits,可能需要访问好几个字节才能得到。
[解决办法]
因为我们能操作存储的最小单元是字节。所以我再说一下存储的问题。

假设我们存储区有一个字节已经用了5bit,后面还有3bit的空白,以及后面还有很多空白字节。

现在来了11个新bit,我们怎么存?是将高3bit先存放,再在下一字节存放低8bit;还是将低3bit先存放,再在下一个字节存放高8bit?

答案是都可以,因为这是一个实现的问题,只要知道编码规则,则解码时按照同样的规则处理就好了。

热点排行