- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
5.哈夫曼編码和译码的算法设计与实现
实验名称 哈夫曼编码和译码的算法设计与实现 实验方案 实验成绩 实验日期 实 验 室 信息系统设计与仿真室I 实验操作 实验台号 班级姓名 通信一班 杨林 实验结果 学号 14112300954 序号 27
实验目的
1、掌握哈夫曼编码的二叉树结构表示方法;
2、编程实现哈夫曼编码译码器;
3、掌握贪心算法的设计策略。
实验任务
① 从文件中读取数据,构建哈夫曼树;
② 利用哈夫曼树,对输入明文进行哈夫曼编码;
③ 利用哈夫曼树,对输入编码译码为明文。
实验设计方案
结构体设计
Huffman树:包括字符,权,父亲下标,左孩子下标,右孩子下标
#define N 29 //26个小写字母,逗号,句号和空格字符.
struct treenode{ //静态链表
char c; //char
int w; //weight
int f; //father
int l; //left child index
int r; //right child index
};
struct treenode htree[2*N-1];
自定义函数设计
函数原型声明
void input(); //读取文件字符、权值数据
void huffman(); //建立huffman树
void getcode(int i, char *str); //得到单个字符的huffman编码
void encode(char ch); //将明文进行huffman编码
void decode(char *str); //将huffman编码译为明文
② 读取文件字符、权值数据
void input()
{
int i;
char c;
int f;
freopen(in.txt,r,stdin);
for(i=0;iN;i++)
{
c=getchar(); //接收字符
scanf(%d,f); //接收权值
getchar(); //接收回车
ht[i].c=c;
ht[i].w=f;
ht[i].l=ht[i].f=ht[i].r=-1; //初始化父亲、左右孩子下标
}
freopen( CON, r, stdin);
}
③建立huffman树
//使用贪心法建立huffman树,每次选择权值最小的根结点
void huffman()
{
void huffman()
{
int j,k,n;
input();
j=0;
k=N;
for(n=N;n2*N-1;n++){ //建立huffman树,共合并N-1次
int r=0,s=0;
ht[n].l=ht[n].f=ht[n].r=-1;
while(r2){ //选择两个最小的权值结点
if((ht[k].w==0 || ht[k].wht[j].w) jN){
s+=ht[j].w;
if(r==0) ht[n].l = j; //修改父亲、孩子下标
else ht[n].r=j;
ht[j].f=n;
j++;
}
else{
s+=ht[k].w;
if(r==0) ht[n].l = k; //修改父亲、孩子下标
else ht[n].r=k;
ht[k].f=n;
k++;
}
r++;
}
ht[n].w=s; //修改权值
}
}
④ 根据字符下标找到字符的huffman编码
//根据字符所在的下标,从叶子结点往上搜索到根节点,然后逆置得到该字符的huffman编码
void getcode(int i, char *str){
int n,j,l=0;
for(n=i;ht[n].f!=-1;n=ht[n].f){ //沿着父亲往上搜索
int m=ht[n].f;
if(n==ht[m].l)
str[l++]=0; //左孩子记为0
else
str[l++]=1; //右孩子记为1
}
for(j=0;j=(l-1)/2;j++){ //将编码逆置
char t;
t=str[j];
str[j]=str[l-1-j];
str[l-1-j]=t;
}
st
您可能关注的文档
- 4初中記叙文人物描写的分类及其作用.doc
- 4可重構三值光学处理器的原理.doc
- 4同步發电机试验方法.doc
- 4基建工程質量控制标准(WHS)第四分册电气试验).docx
- 4基礎会计习题及答案-企业主要经济业务的核算.doc
- 4基礎设施和工作环境控制程序.doc
- 4堤防工程施工工藝标准.doc
- 4外文翻譯3.doc
- 4天字一號面试成功的启示思路要点=答案各类题型分析含答案.doc
- 4孕期必看懷孕40周全程手册(全本).doc
- 2023学年诸暨中学高三年级第二学期3月第二次模拟考试(政治)公开课教案教学设计课件资料.docx
- 运动的合成与分解(二)公开课教案教学设计课件资料.pptx
- 近五年浙江省各地图形的翻折(轴对称)原题公开课教案教学设计课件资料.doc
- 如何做教师-2019-11-13-中关村一小相关公开课教案教学设计课件资料.pptx
- 生活中的圆周运动 (水平面)正式版公开课教案教学设计课件资料.pptx
- 专题10 条件概率与全概率公式公开课教案教学设计课件资料.docx
- 金华市东阳市2019学年第二学期期末测试卷公开课教案教学设计课件资料.doc
- 5 琥珀(第二课时)【慕课堂版】公开课教案教学设计课件资料.pptx
- 项目五 打印米老鼠模型公开课教案教学设计课件资料.ppt
- (打印版)9月25日地理周练公开课教案教学设计课件资料.docx
最近下载
- 2024年全国突发急性传染病防控技能竞赛考试题库-下(判断、简答题汇总).pdf VIP
- 朱祖德等人编制的大学生自主学习量表(原量表+评分方式).pdf
- 2024年全国突发急性传染病防控技能竞赛考试题库-上(单选题汇总).pdf VIP
- 2024年全国突发急性传染病防控技能竞赛考试题库-中(多选题汇总).docx VIP
- 中国共产党百年党史最新版课件.ppt VIP
- 2024年低压电工(特种作业操作证)考试题库及答案(通用版).pdf VIP
- 全国突发急性传染病防控技能竞赛考试题及答案.doc VIP
- 微波与卫星通信演示版.ppt
- 财务共享最佳实践分享.pdf
- 互换性与测量技术基础(3D版)王长春习题答案.docx VIP
文档评论(0)