LZW编码算法.docVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
LZW编码算法

班级 __ __ 学号__姓名 __ ___评分__________ 实验名称 LZW编码与解码算法 实验目的 2.1?通过实验进一步掌握LZW编码的原理; ?用C/C++实现LZW编。LZW编码算法的具体执行步骤如下: 步骤1:?开始时的词典包含所有可能的根(Root),而当前前缀P是空的; 步骤2:?当前字符(C)?:=字符流中的下一个字符; 步骤3:?判断缀-符串P+C是否在词典中 (1)?如果“是”:P?:=?P+C?//?(用C扩展P)?; (2)?如果“否” ①?把代表当前前缀P的码字输出到码字流; ②?把缀-符串P+C添加到词典; ③?令P?:=?C?//(现在的P仅包含一个字符C); 步骤4:?判断码字流中是否还有码字要译 (1)?如果“是”,就返回到步骤2; (2)?如果“否” ①?把代表当前前缀P的码字输出到码字流; ②?结束。#includeiostream #includestring using namespace std; const int N=200; class LZW{ private: string Dic[200];//存放词典 int code[N];//存放编码过的码字 public: LZW(){//设置词典根 Dic[0]=a; Dic[1]=b; Dic[2]=c; string *p=Dic;//定义指针指向词典中的字符} void Bianma(string cs[N]);//进行编码 int IsDic(string e);//判断是否在词典中 int codeDic(string f); void display(int g);//显示结果 }; void LZW::Bianma(string cs[N]){ string P,C,K; P=cs[0]; int l=0; for(int i=1;iN;i++){ C=cs[i];// 当前字符(C)?:=字符流中的下一个字符 K=P+C; if(IsDic(K)) P=K;//P+C在词典中,用C扩展P else{//P+C不在词典中 code[l]=codeDic(P); Dic[3+l]=K;//将P+C加入词典 P=C; l++; } if(N-1==i)//如果字符流中没有字符需要编码 code[l]=codeDic(P); } display(l); } int LZW::IsDic(string e){//如果字符流中还有字符需要编码 for(int b=0; b200; b++) { if(e==Dic[b]) return 1; } return 0; } int LZW::codeDic(string f){ int w=0; for(int y=0;y200;y++) if(f==Dic[y]){ w=y+1; break; } return w; } void LZW::display(int g){ cout经过LZW编码后的如下:endl; for(int i=0;i=g;i++) coutcode[i]; coutendl; cout经LZW编码后的词典如下:endl; for(int r=0;rg+3;r++) coutr+1Dic[r]endl; } int main(){ LZW t; string CSstream[N];要进行LZW编码的字符序列 int length;// 要进行LZW编码的字符序列 cout请输入所求码子序列的长度:; cinlength; while(length=N){ cout该长度太长,请重新输入:; cinlength; } cout请输入要进行LZW编码的字符序列:endl; for(int a=0;alength;a++) cinCSstream[a]; t.Bianma(CSstream); return 0; } 软件:Windows XP操作系统、Visual C++高级语言环境。 实验结果(截图)及分析 实验存在问题和解决方法 在设计过程中,设计LZW编码的算法比较复杂,不能很快地将编码思想转化为具体的编程语言,仔细地看过书上的相关介绍并通过上网参考才完成。 实验思考题 7.1、分析LZW编码算法的优缺点。 LZW的优点是逻辑简单,实现速度快。缺点是字典的生成和查找是基于顺序插入和检索模式void update_wordlist(int*input) { int i=0; int m; k=0; word*rear,*now

文档评论(0)

wuyuetian + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档