- 1、本文档共35页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
信息论课程设计分析
目录
目录 I
摘要 III
前言 IV
1 课题背景 1
1.1 背景 1
1.2 需求分析 1
1.3 意义 2
1.4 文献综述 2
2 设计简介及设计方案论述 3
2.1 设计简介 3
2.2 设计方案论述 3
3 详细设计 5
3.1 结构体定义 5
3.2 统计字符 5
3.3 霍夫曼编码 6
3.4 费诺编码 7
3.5 普通编码 9
3.6 输出信息 10
3.7 转码 10
3.8 解码 11
4 设计结果及分析 13
4.1 测试结果 13
4.2 测试分析 15
5总结 16
致谢 18
参考文献 19
附录 程序代码 20
摘要
本课题主要是运用VC6.0,开发基于控制台下的霍夫曼、费诺与普通编码程序。本文较详细地介绍了这一程序的设计思想,功能结构以及算法与数据结构的设计和某些功能函数的设计。本文还给出了对这一程序的测试情况以及对测试结果的分析。
关键词:本文程序
第1章介绍了第2章第3章第4章第5章总结了本次设计的意义,以及重点我在本次设计中的收获感想。
2014-06-16于武汉工程大学理学院课题背景
背景
信源编码主要可分为无失真信源编码和限失真信源编码无失真信源编码主要适用于离散信源或数字信号如文本表格及工程图纸等信源它们要求进行无失真地数据压缩要求完全能够无失真地可逆恢复根据上节所描述,设计程序使需要对文件进行压缩的用户,可以通过输入文本,便可对文件进行编码以及解码。(1) 能够用霍夫曼编码方式进行编码解码;
(2) 能够用费诺编码方式进行编码解码;
(3) 能够用普通方式进行编码解码(4) 能够直观地看出三种编码方式的差别。
意义
通过编码的实例可以看出,我们编写的二元霍夫曼码具有以下三个特点:
第一,霍夫曼码的编码方式保证了概率大的符号对应短码,概率小的符号对应长码,即,有而且短码得到充分利用文[1]较详细地介绍了数据结构的一些基本知识,它对于我们了解和运用数据结构知识有非常直接的帮助。
文[2]信息编码的专业知识,帮助我们了解编码的相关原理,流程,以及算法,是保证我们进行编程的理论基础。
设计简介及设计方案论述
设计简介
根据需求分析,我们将设计两个结构体:Node(树结点结构体)和CodeNode(即编码结构体)。其主要功能模块有:输入字符串、筛选概率、霍夫曼编码、费诺编码、普通编码,以及转码和解码,并计算平均码长和编码效率。其类结构见图2-1。
输入字符串
统计每个字符概率
霍夫曼编码 费诺编码 普通编码
平均码长、编码效率
转码、解码
图2-1 程序的功能结构
设计方案论述
该程序大致包含以下功能:
输入字符串,设置一个结束符,例如‘#’,只有输入结束符或字符长度超过定义的字符容量时,才会结束。接着会把字符串中的每个字符统计起来,并几率这些字符各自相应的概率。
霍夫曼编码:保证出现概率最小的字符码长最大。
费诺编码:保证概率平均分配。
普通编码:按字符出现的先后顺序按二进制编码。
转码:将字符串中的每个字符转化成相应的编码。
解码:将转码的编码翻译成字符。
详细设计
结构体定义{
int suffix;
float weight; //权值
char str;
int left,right,parent; //分别指向该节点的左孩子,右孩子,和双亲节点
};
2.定义编码结构体
struct CodeNode
{
char str;
double weight;//权值
int length;//编码长度
char code[L];//编码字符
};
统计字符
void SearchStr(char s[],Node a[])
{//查找字符串中字符的个数和每个字符出现的次数
int i,j,k=0;
for(i=0;iN;i++)//初始化每个字符出现的次数
a[i].weight=0;
i=0;
do
{
for(j=0;jk;j++) //在str[]中查找是否有该字符
if(a[j].str==s[i]){
a[j].weight++;
break;
}
if(j==k)
{ //在str[]中无该字符,将其存入最后一个单元
a[k].str=s[i];
a[k++].weight++;
}
i++;
}while(s[i]!=\0);
a[k].str=\0; //将字符串结尾置\
文档评论(0)