LZW编码与译码_第1页
LZW编码与译码_第2页
LZW编码与译码_第3页
LZW编码与译码_第4页
LZW编码与译码_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、重庆交通大学信息科学与工程学院综合性设计性实验报告专 业: 通信工程专业11级 学 号: 631106040222 姓 名: 徐 国 健 实验所属课程: 信息论与编码 实验室(中心): 信息技术软件实验室 指 导 教 师 : 李益才 2014年5月教师评阅意见:签名: 年 月 日实验成绩:一、题目LZW编码与译码二、编程要求要求一:对字符串进行LZW编码,输出与字符串相一一对应的码字,本次实验所选的字符串为 “ABBABABAC”。要求二:对要求一输出结果的码字进行译码输出三、仿真方案详细设计 LZW(Lempel-Ziv & Welch)编码又称为字串表编码,属于一种无损压缩编码。L

2、ZW编码与游程编码类似,也是对字符串进行编码从而实现压缩,但它在编码的同时还生成了特定字符串以及与之对应的索引字符串表。LZW压缩使用字典库查找方案。它读入待压缩的数据并与一个字典库(库开始是空的)中的字符串进行对比,如有匹配的字符串,则输出该字符串数据在字典库中的位置索引,否则将该字符串插入字典中。 LZW编码算法将字典初始化为包含所有可能的单字字符,当前前缀P初始化为空;读入当前字符到C(即字符流中的下一个字符);判断P+C是否在字典中,如果在字典中,则用C扩展P,即P=P+C;否则输出与当前前缀P相对应的码字,同时将P+C添加到字典中并令P=C,即重新置当前前缀;判断字符流结束与否,如果

3、没有结束,转,否则把代表当前前缀P的码字输出到码字流;结束。编码流程图如下LZW译码算法 初始化字典,并读入一个码字W; 试读一个码字K,如果不存在码字K可读,则输出W对应的字符串,转;否则,在W对应的字符(串)末尾加入码字K的第一个字符,形成的字符串加入字典(如果K还未在字典中出现,则W+FirstChar(W)放入字典)。然后输出W对应的字符(串),同时W=K(重新赋W的值);转; 算法结束。译码流程图如下四、仿真结果及结论 结果所示:结论:本次实验成功的完成了LZW编码的编码过程和译码过程,同时对字符串进行编码从而实现压缩,但它在编码的同时还生成了特定字符串以及与之对应的索引字符串表即词

4、典。从试验结果看出我们对字符串进行编码首要就是进行词典构造。五、总结与体会总结:这次实验完成了LZW的编码与译码,同时也让我对它的算法有了一个深刻的理解与掌握。在编程过程中需要对C+语言有较好的掌握,里面涉及到了类和指针的用法。这个实验会考察你对算法的理解与掌握能力,最重要的还有分析能力与C+编程基本功。心得体会:通过本次实验,我掌握了LZW的编码与译码算法,对它的核心思想有了较好的掌握。它是无失真信源编码的一种重要方法,刚开始的时候编程对这个算法还不太熟练,我通过请教老师和网上查找资料对着个算法编程有了一定的想法。随后,我反复编写与思考,最终得以实现结果。本次实验运行环境是在Visual C

5、+6.0,里面涉及了C与C+的语言。通过这次实验不仅加强了我的编程能力,也提高了我的分析问题的能力,虽然作业量不是很大,但是我通过实验又重新对编程语言有了一个很好的回顾。希望以后能多做类似的实验,我觉得可以很好的把以前所学很好的结合起来。同时也感谢老师每次对我的细致耐心的讲解,让我对理论知识有了很好的巩固。六、主要仿真代码#include<iostream>#include<string>using namespace std;const int N=200;class LZWprivate:string Dic200;int codeN;public:LZW()Dic

6、0='A'Dic1='B'Dic2='C'void encode(string csN);void decode(int csN,int length1);int IsDic(string e);int codeDic(string f);void display(int g);void LZW:encode(string csN)string P,C,K;P=cs0;int l=0;for(int i=1;i<N;i+)C=csi;K=P+C;if(IsDic(K)P=K;elsecodel=codeDic(P); Dic3+l=K;P=

7、C;l+;if(N-1=i)codel=codeDic(P); display(l);int LZW:IsDic(string e)for(int b=0; b<N; b+)if(e=Dicb) return 1;return 0;int LZW:codeDic(string f)int w=0;for(int y=0;y<N;y+)if(f=Dicy)w=y+1;break;return w;void LZW:display(int g)cout<<"经过LZW编码后的码字如下:"<<endl;for(int i=0;i<=g;i

8、+)cout<<codei;cout<<endl;cout<<"经LZW编码后的词典如下:"<<endl;for(int r=0;r<g+3;r+)cout<<r+1<<Dicr<<endl;void LZW:decode(int csN,int length1)int w,k;w=cs0;int I=0;string p1,p2;for (int i=1;i<length1;i+)k=csi;p1=Dicw-1;if (Dick-1!="0")p2=Dick

9、-1;else p2=p1;DicI+3=p1+p20;I+;cout<<p1;w=k;if (i=length1)cout<<Dicw-1<<endl;cout<<"经LZW译码后的词典如下:"<<endl;for(int r=0;r<I+3;r+)cout<<r+1<<Dicr<<endl;int main()LZW t;string CSstreamN;int bN;int length,length1;cout<<"made by 徐国健"<<endl;cout<<"请输入所求码子序列的长度:"cin>>length;while(length>=N)cout<<"该长度太长,请重新输入:"cin>>length;cout<<"请输入要进行LZW编码的字符序列:"<<endl;for(int a=0;a<length;a+)cin>>CSstreama;t.encode(CSstream);cout<<"输入译码

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论