信息论报告me.doc
文本预览下载声明
信息论编码与密码学实习报告
姓 名:
学 号:
班 级:
指导老师:
目录
一.Lempel Zil字典编码----------------------------7
二.信道容量的计算--------------------------------16
三.Hamming码的编码与译码-------------------------36
四.循环码最小距离的计算--------------------------43
五.维特比译码器软件的设计------------------------56
六.实习心得--------------------------------------57
一、Lempel Ziv字典编码
题目要求:
写一个执行Lempel-Ziv算法的程序。该程序的输入可以是英文字母。它应该将字母转化为她们的ASCII码然后进行压缩.它应该输出压缩结果。用这个程序求下列的字符串所得到的压缩:
The Lempel Ziv algorithm can compress the English text by about fifty five precent.
The cat cannot sit on the canopy of the car.
算法设计:
(1)字典初始化
(2)增添开始与结束位
(3)开始读入字符流,进入循环
(4)以两个字符为一组构建新的字符
(5)判断新的字符是否存在于字典中,如果存在,不做处理,如果不存在,将其添加到字典中,将该新字符在字典中的位置作为编码发送
(6)译码过程与编码过程相反
算法流程图
程序代码:
#include iostream
#include string
#include iomanip
using namespace std;
string str1;//定义字符串变量str1
string str2;
string dic[500];
int n;
//函数名:int find(string s)
//函数功能:在字典中寻找字符s,并返回在字典中的序号
//参数:所要查找的字符
//返回值:字符在字典中对应的标号
int find(string s)
{
int temp=-1;
for(int i=0;i100;i++)
{
if(dic[i]==s) temp=i+1;
}
return temp;
}
//函数名:void init()
//函数功能:用a~z,A~Z以及一些标点符号,初始化字典
//参数:void
//返回值:void
void init() //字典初始化
{
int i,j;
for(j=0,i=0;i=26;i++)
{
dic[j]=A+i;
j++;
}
for(j=26,i=0;i=26;i++)
{
dic[j]=a+i;
j++;
}
dic[52]=,; dic[53]=.;dic[54]=?;dic[55]=!;
}
//函数名:void code(string str)
显示全部