LZW编码与译码

更新时间:2023-10-16 17:28:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

重庆交通大学信息科学与工程学院

综合性设计性实验报告

专 业: 通信工程专业11级

学 号: 631106040222

姓 名: 徐 国 健

实验所属课程: 信息论与编码

实验室(中心): 信息技术软件实验室

指 导 教 师 : 李益才

2014年5月

教师评阅意见: 签名: 年 月 日 实验成绩:

一、题目

LZW编码与译码

二、编程要求

要求一:对字符串进行LZW编码,输出与字符串相一一对应的码字,本次实验所选的字符串为 “ABBABABAC”。

要求二:对要求一输出结果的码字进行译码输出

三、仿真方案详细设计

LZW(Lempel-Ziv & Welch)编码又称为字串表编码,属于一种无损压缩编码。LZW编码与游程编码类似,也是对字符串进行编码从而实现压缩,但它在编码的同时还生成了特定字符串以及与之对应的索引字符串表。LZW压缩使用字典库查找方案。它读入待压缩的数据并与一个字典库(库开始是空的)中的字符串进行对比,如有匹配的字符串,则输出该字符串数据在字典库中的位置索引,否则将该字符串插入字典中。 LZW编码算法

①将字典初始化为包含所有可能的单字字符,当前前缀P初始化为空; ②读入当前字符到C(即字符流中的下一个字符);

③判断P+C是否在字典中,如果在字典中,则用C扩展P,即P=P+C;否则输出与当前前缀P相对应的码字,同时将P+C添加到字典中并令P=C,即重新置当前前缀;

④判断字符流结束与否,如果没有结束,转②,否则把代表当前前缀P的码字输出到码字流;

⑤结束。 编码流程图如下

LZW译码算法

①初始化字典,并读入一个码字W;

②试读一个码字K,如果不存在码字K可读,则输出W对应的字符串,转③;否则,在W对应的字符(串)末尾加入码字K的第一个字符,形成的字符串加入字典(如果K还未在字典中出现,则W+FirstChar(W)放入字典)。然后输出W对应的字符(串),同时W=K(重新赋W的值);转②; ③算法结束。

译码流程图如下

输出W对应的字符串 输出码字W对应的字符串将P1+FirstChar(P2)存入字典结束K不在字典中N取出码字K对应的字符串P2P2=P1YK是结束符N取出码字W对应的字符串P1初始化字典读入一个码字W试读一个码字KW=K

四、仿真结果及结论 结果所示:

结论:本次实验成功的完成了LZW编码的编码过程和译码过程,同时对字符串进行编码从而实现压缩,但它在编码的同时还生成了特定字符串以及与之对应的索引字符串表即词典。从试验结果看出我们对字符串进行编码首要就是进行词典构造。

五、总结与体会

总结:这次实验完成了LZW的编码与译码,同时也让我对它的算法有了一个深刻的理解与掌握。在编程过程中需要对C++语言有较好的掌握,里面涉及到了类和指针的用法。这个实验会考察你对算法的理解与掌握能力,最重要的还有分析能力与C++编程基本功。

心得体会:通过本次实验,我掌握了LZW的编码与译码算法,对它的核心思想有了较好的掌握。它是无失真信源编码的一种重要方法,刚开始的时候编程对这个算法还不太熟练,我通过请教老师和网上查找资料对着个算法编程有了一定的想法。随后,我反复编写与思考,最终得以实现结果。本次实验运行环境是在Visual C++6.0,里面涉及了C与C++的语言。通过这次实验不仅加强了我的编程能力,也提高了我的分析问题的能力,虽然作业量不是很大,但是我通过实验又重新对编程语言有了一个很好的回顾。希望以后能多做类似的实

本文来源:https://www.bwwdw.com/article/toff.html

Top