信息论编码实习报告.docx
- 文档编号:160521
- 上传时间:2022-10-04
- 格式:DOCX
- 页数:61
- 大小:103.96KB
信息论编码实习报告.docx
《信息论编码实习报告.docx》由会员分享,可在线阅读,更多相关《信息论编码实习报告.docx(61页珍藏版)》请在冰豆网上搜索。
信息论编码实习报告
姓 名:
班 级:
学号:
指导老师:
实习时间:
内容一 Lempel-Ziv
①实习目的
掌握Lempel-Ziv编码译码算法的原理。
②实习内容
写一个执行Lempel-Ziv算法的程序,该程序的输入可以是英文字母,它应该将字母转化为它们的ASCII 码然后进行压缩。
用这个程序对下列的字符串进行压缩:
(1)TheLempelZivalgorithmcancompresstheEnglishtextbyaboutfiftyfivepercent.
(2)Thecatcannotsitonthecanopyofthecar.
③算法设计
(1)编码算法
Dictionary[j]←allnsingle-characterj←n+1
prefix←readfirstcharacterinchar-streamwhile((c←nextcharacter)!
=NULL)
Ifprefix.cisinDictionaryprefix←prefix.c
else
code-stream←cwforprefixDictionary[j]←prefix.c
j←n+1
prefix←c
end
code-stream←cwforprefix
(2)译码算法
Dictionary[j]←allnsingle-characterj←n+1
cw←firstcodefromcode-streamchar-stream←Dictionary[cw]pw←cw
while((cw←nextcodeword)!
=NULL)ifcwisinDictionary
char-stream←Dictionary[cw]prefix←Dictionary[pw]
k←firstcharacterofDictionary[cw]
Dictionary[j]←prefix.kj←n+1
pw←cw
else
prefix←Dictionary[pw]
k←firstcharacterofprefixchar-stream←prefix.kDictionary[j]←prefix.k
pw←cwj←n+1
end
④程序及运行结果
(1)编码程序#include
#include
charstr[]="TheLempelZivalgorithmcancompresstheenglishtextbyaboutfiftyfivepercent.";
char Dic[200][5];//定义一个二维的字符串数组,用来存放字典内容,200表示个数,5表示长度
/**********************************************************
函数名称:
intFind(strings)
函数功能:
在字典中寻找字符s,并返回在字典中的序号输入参数:
所要查找的字符
返回值:
字符在字典中对应的标号
**********************************************************/intFind(char*str)
{
inti,temp=-1;
for(i=0;i<200;i++) //这个地方的i<200要与上面定义的dic
长度相对应,否则会输出错误结果
{
if(strcmp(Dic[i],str)==0)temp=i+1;//字符的查找,并输出对应的相对位置
}
returntemp;
}
/**********************************************************
函数名称:
voidDic_init(),字典初始化
函数功能:
将a~z,A~Z以及一些标点符号加入字典中并编号输入参数:
void
返回值:
void
/**********************************************************/voidDic_init()
{
inti,j;
for(j=0,i=0;i<26;i++)//新建一个字典,将A-Z存入其中
{
Dic[j][0]='A'+i;j++;
}
for(j=26,i=0;i<26;i++)//新建一个字典,将a-z存入其中
{
Dic[j][0]='a'+i;j++;
}
Dic[52][0]=',';//存入四个符号
Dic[53][0]='.';
Dic[54][0]='?
';
Dic[55][0]='!
';
Dic[56][0]='';
}
intmain()//主程序
{
printf("输入待编码的字符串为:
\n%s\n",str);
Dic_init(); //字典初始化
chartemp[2]; //定义2个字符长的字符串temp[0]=str[0]; //取第一个字符temp[1]='\0'; //将第2个设置为空格
charP[5]; //P为前缀,将temp赋给字符串Pstrcpy(P,temp);
inti=1; //下面从第2个字符开始
intj=57; //目前字典存储的最后一个位置
printf("编码为:
");while
(1)
{
chart[2]; //定义2个字符长的字符串t[0]=str[i]; //取下一字符
t[1]='\0'; //将第2个设置为空格charC[5]; //C为字符流中下一个字符chard[5];
strcpy(C,t);
charBlank[2]="";
if(!
strcmp(C,Blank)) //无码字要译,结束
{
printf("%4d",Find(P));//输出代表当前前缀的码字break; //退出循环,编码结束
}
strcpy(d,P);
if(Find(strcat(P,C))>-1) //有码字要译,如果P+C在词典中,则用C扩展P,进行下一步:
{
i++;
}
else //如果P+C不在词典中,则将P+C添加到词典中,令
P:
=C
{
printf("%4d",Find(d));//输出代表当前前缀的码字charPC[5];
strcpy(PC,strcat(d,C));strcpy(Dic[j++],PC);strcpy(P,C);
i++;
}
}
printf("\n生成的字典为:
\n");
for(i=0;i { printf("%8d—%s;\n",i+1,Dic[i]); } return0; } 运行结果: (2)译码程序#include #include //intCodenum[100]; //定义接收到的一串编码 intCodenum[]={20,34,31,57,12,31,39,42,31,38,57,26,35,48,57,27,38, 33,41,44,35,46,34,39,57,29,27,40,82,41,64,44,31,45,45,57,79,60,31,40,3 3,38,35,45,34,93,31,50,46,57,28,51,72,28,41,47,106,32,35,32,46,109,115,4 8,60,65,44,29,96,46,54,0}; intCodeum[]={20,34,31,57,29,27,46,61,27,40,40,41,64,45,35,64,41,40, 57,46,59,65,68,42,51,57,41,32,76,78,62,44,54,0}; //定义接收到的一串编码,结尾以0做标志 charstr[100]; //定义一个待编码的字符串变量 chardic[200][10]; //这是定义字典存放空间,其容量大小可以自己更改,但是一定要有足够的地方存放下面生成字典的内容,否则会运行出错 //intn; /********************************************************** 函数名称: intFind(intx) 函数功能: 在字典中寻找字典元素并返回输入参数: 所要查找的编码 返回值: 字典中相应位置的字典元素 **********************************************************/ /********************************************************** 函数名称: voidDic_init(),字典初始化 函数功能: 用a~z,A~Z以及一些标点符号,初始化字典输入参数: void 返回值: void **********************************************************/voidDic_init() { inti,j; for(j=0,i=0;i<26;i++)//新建一个字典,将A-Z存入其中 { dic[j][0]='A'+i; dic[j][1]='\0';j++; } for(j=26,i=0;i<26;i++)//新建一个字典,将a-z存入其中 { dic[j][0]='a'+i; dic[j][1]='\0';j++; } dic[52][0]=',';//存入四个符号 dic[53][0]='.'; dic[54][0]='? '; dic[55][0]='! '; dic[56][0]=''; //for(i=52;i<=56;i++)dic[i][1]='\0'; } /********************************************************** 函数名称: voidcode(stringstr) 函数功能: 对输入的字符串进行LZW字典编码输入参数: str待编码的字符串 返回值: 用cout输出显示编码后的码 **********************************************************/ voidDe_code(int*code) { charCurr[10];charCu[2];Cu[1]='\0'; charPre[10]; Dic_init
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 信息论 编码 实习 报告