LZW算法LZW算法

如题所述

LZW压缩算法,这是一种无损压缩算法,通过创建一个转换串表(字典)T,将输入字符串映射成定长的码字。该算法在12位4096种可能的代码中,256个代码用于表示单个字符,其余用于存储字符串组合。串表中的字符串具有前缀性,即ωK∈T=>ω∈T。LZW算法的流程包括初始化、读取输入字符并构建前缀串ω,然后根据输入字符读取和更新ω值。具体步骤如下:
1. 初始化:将所有单字符串放入串表。
2. 读取第一个输入字符,赋予前缀串ω。
3. Step: 读取下一个输入字符K;
- 若K不在串表中,输出当前ω的码字,结束算法。
- 若ωK存在于串表中,更新ω为ωK,重复Step。
- 若ωK不在串表中,输出当前ω的码字,将ωK加入串表,更新ω为K,重复Step。
举例:对于输入字符串"ababcbababaaaaaaa",LZW编码结果为:"a", "b", "c", "ab", "ba", "abc", "cb", "bab", "baba", "aa", "aaaa", "aaaaa"。
LZW解压算法的步骤如下:
1. 读取第一个字符,输出它,并将其赋给prefix_character。
2. 读取下一个字符,判断文件是否结束,未结束则赋给current_character。
3. 若current_character大于N(基本字符元素数量),检查是否在code_table中。
4. 若不在code_table中,输出prefix_character与prefix_character首字符的组合,将此组合加入code_table,同时赋给prefix_character,转向执行步骤2。
5. 若在code_table中,遍历current_character的所有字符,输出它们,将current_character赋给prefix_character,转向执行步骤2。
6. 若current_character小于N,直接输出它,将current_character赋给prefix_character,转向执行步骤2。
扩展资料:LZW压缩算法通过建立一个字符串表,用较短的代码表示较长的字符串来实现压缩。LZW压缩算法是Unisys的专利,有效期至2003年,因此对其使用存在限制。
温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

大家正在搜

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网