资源预览内容
第1页 / 共18页
第2页 / 共18页
第3页 / 共18页
第4页 / 共18页
第5页 / 共18页
第6页 / 共18页
第7页 / 共18页
第8页 / 共18页
第9页 / 共18页
第10页 / 共18页
亲,该文档总共18页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
1.判定唯一可译码2.LZw编码3.算数编码一判定唯一可译码1任务说明输入:任意的一个码(即已知码字个数及每个具体的码字)输出:判决结果(是/不是)输入文件:inl.txt,含至少2组码,每组的结尾为”$”符输出文件:outl.txt,对每组码的判断结果说明:为了简化设计,可以假定码字为0,l串2问题分析、实现原理、流程图参考算法伪代码:ForallW,WCdoijfW是W的前缀thenij将相应的后缀作为一个尾随后缀放入集合F中0EndifEndforLoopForallWCdoiForallWFdojnfW是W的前缀thenij将相应的后缀作为一个尾随后缀放入集合F中n+1ElseifW是W的前缀thenji将相应的后缀作为一个尾随后缀放入集合F中n+1EndifEndforEndforF,IfWeF,WeCtheniiReturnfalseElseifF中未出现新的元素thenReturntrueEndif能走到这里,说明F中有新的元素出现,需继续Endloop3实现源码#include#includeusingnamespacestd;structstringschar*string;structstrings*next;structstringsFstr,*Fh,*FP;/输出当前集合voidoutputstr(strings*str)docoutstringnext;while(str);coutb?b:a;inlineintMAX(inta,intb)returnab?a:b;#definelength_a(strlen(CP)#definelength_b(strlen(tempPtr)/判断一个码是否在一个码集合中,在则返回0,不在返回1intcomparing(strings*st_string,char*code)while(st_string-next)st_string=st_string-next;if(!strcmp(st_string-string,code)return0;return1;/判断两个码字是否一个是另一个的前缀,如果是则生成后缀码voidhouzhui(char*CP,char*tempPtr)if(!strcmp(CP,tempPtr)cout集合C和集合F中有相同码字:vvendlCPnext=NULL;cp_temp-string=newcharabs(length_a-length_b)+1;char*longstr;longstr=(length_alength_b?CP:tempPtr);/将长度长的码赋给longstr/取出后缀for(intk=MIN(length_a,length_b);kvMAX(length_a,length_b);k+)cp_temp-stringk-MIN(length_a,length_b)=longstrk;cp_temp-stringabs(length_a-length_b)=NULL;判断新生成的后缀码是否已在集合F里,不在则加入F集合if(comparing(Fh,cp_temp-string)FP-next=cp_temp;FP=FP-next;voidmain()/功能提示和程序初始化准备coutvvtt唯一可译码的判断!nvvendl;structstringsCstr,*Ch,*CP,*tempPtr;Ch=&Cstr;CP=Ch;Fh=&Fstr;FP=Fh;charc=C:;Ch-string=newcharstrlen(c);strcpy(Ch-string,c);Ch-next=NULL;charf=F:;Fh-string=newcharstrlen(f);strcpy(Fh-string,f);Fh-next=NULL;/输入待检测码的个数intCnum;coutvv输入待检测码的个数:;cinCnum;coutvv输入待检测码vvendl;for(inti=0;itempstr;CP-next=new(structstrings);CP=CP-next;CP-string=newcharstrlen(tempstr);strcpy(CP-string,tempstr);CP-next=NULL;outputstr(Ch);CP=Ch;while(CP-next-next)CP=CP-next;tempPtr=CP;dotempPtr=tempPtr-next;houzhui(CP-string,tempPtr-string);while(tempPtr-next);outputstr(Fh);structstrings*Fbegin,*Fend;Fend=Fh;while(1)if(Fend=FP)coutvv是唯一可译码码组!vvendl;exit(1);Fbegin=Fend;Fend=FP;CP=Ch;while(CP-next)CP=CP-next;tempPtr=Fbegin;for(;)tempPtr=tempPtr-next;houzhui(CP-string,tempPtr-string);if(tempPtr=Fend)break;outputstr(Fh);/输出F集合中全部元素4.运行结果:输入、输出及结果分析5设计体会通过对判定唯一可译码算法的实现,我进一步了解判定唯一可译码缩的基本原理及过,体会到了其重要性,同时也锻炼了我独立分析问题以及解决问题的能力,这次课程设计让我深刻认识到了自己编程能力的不足,在以后的学习中要加强自己的编程能力。二LZw编码1. 任务说明输入:由集合a,b,c,d内字符构成的输入串,输入序列长度Lv=100处理:先编码,再对编码结果译码输出:编码结果,译码结果输入文件:in4.txt,含至少两组输入,每组包含满足要求的串输出文件:out4.txt,对每组输入的编码和译码结果2. 问题分析、实现原理、流程图实现原理:LZW就是通过建立一个字符串表,用较短的代码来表示较长的字符串来实现压缩.字符串和编码的对应关系是在压缩过程中动态生成的,并且隐含在压缩数据中,解压的时候根据表来进行恢复,算是一种无损压缩.在本次实验中我们就进行了LZW编码以及译码简单算法的编写。LZW编码又称字串表编码,是无损压缩技术改进后的压缩方法。它采用了一种先进的串表压缩,将每个第一次出现的串放在一个串表当中,用一个数字来表示串,压缩文件只进行数字的存贮,则不存贮串,从而使图像文件的压缩效率得到了较大的提高。LZW编码算法的原理是首先建立一个词典,即跟缀表。对于字符串流,我们要进行分析,从词典中寻找最长匹配串,即字符串P在词典中,而字符串P+后一个字符C不在词典中。此时,输出P对应的码字,将P+C放入词典中。编码参考算法:(以下为基于4叉树字典的伪代码,同学们可另外自行设计,参见教材P335)1.字典初始化:建一个初始的4叉树。该树的每个节点包含了字典序号信息。若字典序号非0,表示该节点对应的字典已建立。每个节点的儿子按顺序依次对应于输入字符a,b,c,d.根节点有4个儿子节点A、B、C、D,分别对应初始字典中的a,b,c,d,其对应的序号分别为1,2,3,4;而A、B、C、D节点均设4个儿子,其对应的序号设为0,对应的字典串分别为aa,ab,ac,ad;ba,bb,bc,bd;ca,cb,cc,cd;da,db,dc,dd建议:字典采用4叉树结构3. 实现源码#include#include#includeusingnamespacestd;stringdic30;intn;intfind(strings)inttemp=-1;for(inti=0;i30;i+)if(dici=s)temp=i+1;returntemp;voidinit()dic0=a;dic1=b;dic2=c;dic3=d;for(inti=4;i30;i+)dici=;voidcode(stringstr)init();chartemp2;temp0=str0;temp1=0;stringw=temp;inti=1;intj=3;coutn编码为:;for(;)chart2;t0=stri;t1=0;stringk=t;if(k=)cout-1)w=w+k;i+;elsecoutfind(w);stringwk=w+k;dicj+=wk;w=k;i+;coutendl;for(i=0;ij;i+)coutsetw(45)i+1setw(12)diciendl;coutendl;voiddecode(intc)init();intpw,cw;cw=c0;intj=2;coutn译码为:;coutdiccw-1;for(inti=0;in-1;i+)pw=cw;cw=ci+1;if(cw=j+1)coutdiccw-1;chart2;t0=diccw-10;t1=0;stringk=t;j+;dicj=dicpw-1+k;elsechart2;t0=dicpw-10;t1=0;stringk=t;j+;dicj=dicpw-1+k;coutdiccw-1;coutendl;for(inti=0;ij+1;i+)coutsetw(45)i+1setw(12)diciendl;coutendl;
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号