如何为LZW压缩构建树?

问题描述 投票:-5回答:1

有人可以告诉我如何在c中为LZW压缩构建树吗?是这样的吗结构树{下一短[255];}

c tree lzw
1个回答
1
投票
说每个字典条目都由(code | char)组成,并且您有一个输入字符串“ abcd”,然后dictionary [100] =('a'|'b'),dictionary [101] =(100 |'c '),字典[102] =(101 |'d')。

请注意,解码器必须使用类似堆栈的内容来保存字符串,因为它以相反的顺序获取字符。例如,使用代码102,它将按该顺序从[102]中检索“ d”,然后从[101]中检索“ c”,然后从[100]中检索“ b”和“ a”。当代码<0x100时,指示字符串的结尾(实际上是开头)。

还有一种特殊情况,即解码器接收到的代码将作为下一个要放入字典的代码,但尚不存在。这由dictionary [next code] =(先前的代码|先前的代码的最后一个字符)处理。必须保存每个解码字符串的前一个代码和最后一个字符,以处理这种情况。

通常有控制代码,比如说有8个,然后压缩器将8个非控制代码相加,然后解压缩器从每个非控制代码中减去8个。

压缩流可能包含以大端或小端格式存储的代码。对于大字节序格式,来自压缩流的每个字节进入工作的“寄存器”的低位字节,在拾取新字节之前将其左移。对于小字节序格式,压缩流中的每个字节都进入工作的“寄存器”的高位部分,并且在拾取新字节后立即将“寄存器”右移。

编码器和解码器都需要某种方法来搜索字典以查找与(code | char)的匹配项。某种哈希函数可以在这里提供帮助。硬件实现将使用内容可寻址(关联)存储器。

进行网络搜索以查看是否可以找到实际的代码示例。

LZW是LZ78的派生词。请注意,LZ77及其衍生版本更易于实现,对于X86程序文件,LZ77“移动窗口”压缩算法的性能更好。 Wiki链接LZ77 LZ78

© www.soinside.com 2019 - 2024. All rights reserved.