- 5
- 0
- 约2.82千字
- 约 4页
- 2020-08-31 发布于天津
- 举报
数据结构实验报告
1?问题描述
已知n个字符在原文中出现的频率,求它们的哈夫曼编码
2?问题分析
求哈夫曼编码,首先要根据字符出现的频率,即权值,构建哈夫曼树,然后 根据哈夫曼树求出哈夫曼编码。
3.算法设计
创建哈夫曼树:对n个权值,创建2n-1个节点,pare nt都默认为0,然后 进行循环查找,每次循环都从所有节点中找出 pare nt为0且weight最小的
两个节点,序号分别为si和s2,将si节点和s2节点作为本节点的Ichild 和rchild,构建出一颗哈夫曼树,循环 2n-1次,最后只剩下一颗哈夫曼 树,即所要求的哈夫曼树。
哈夫曼编码:从叶子节点出发,寻找双亲节点,若没有则说明已经到根节 点;若有双亲节点,如果本节点是双亲节点的左孩子,则编码为 0,右孩子
编码为1,依次寻找直到走到根节点。最后将所求编码倒序输出即为哈夫曼 编码。
4.测试数据
测试数据为8个字符,权值分别为:5,29,7,8,14,23,3,11
测试结果:
请嚅入套编码的字符,以空格隔开 a b c d e F h
请输入要编码字符的权值,以空格帚开
5 29 7 a 1-1 23 3 11 赫夫曼编码为:
a: 0010
b:18
c:0801
4:0G08
5?总结
建立哈夫曼树的时候,是逆向构建,即先创建叶节点,再创建根节点,从下往上 创建。求哈夫曼编码的时候也是一样,从叶子节点不断找该节点的根节点,直到找到 该哈夫曼树的根节点。
6?附录
#in elude iostream.h #i nclude malloc.h
#in elude stri ng.h
#defi ne ERROR 0
#defi ne OK 1
// 赫夫曼树和赫夫曼编码的存储表示
typedef struct{
un sig ned int weight;
un sig ned int pare nt,lchild,rchild;
}HTNode,* Huffma nTree;
typedef char ** Huffma nCode;
// 赫夫曼算法
void Select(HuffmanTree HT, int n, int min 1, int min2){
un sig ned int m1,m2;
m1=m2=-1;
//随意确定两个权值为最小
for(i nt i=1;i=n ;i++){ if(m2!=-1) break;
if(HT[i].pare nt==O){
if(m 1==-1){
m仁 HT[i].weight;
min 1=i;
}
else{
m2=HT[i].weight;
mi n2=i;
}
}
}
//找最小权值
for(i nt k=1;k=n; k++){
if(HT[k].pare nt==O){
int w=HT[k].weight; if(k==min1 || k==min2) con ti nue;
if(wm2){
m2=w; min 2=k;
}else if(wm1){
m仁w;
mi n仁k;
}
void Huffma nCodi ng(Huffma nTree HT, Huffma nCode HC, i nt *w, i nt n){
〃w存放n个字符的权值(均0),构造赫夫曼树 HT,并求出n个字符的赫夫曼编 码HC
if(n =1)
return;
int m = 2* n-1;
HT = (Huffma nTree)malloc((m+1)*sizeof(HTNode));//0 号单元未用
int i;
Huffma nTree p=HT;
for(p++,i=1;i=n ;i++,p++,w++){
p-weight = *w;
p-pare nt = 0;
p-lchild = 0;
p-rchild = 0;
}
for(;i=m;i++,p++){
p-weight = 0;
p-pare nt = 0;
p-lchild = 0; p-rchild = 0;
}
int s1,s2;
for(i=n+1;i=m;i++){〃 建赫夫曼树
//在HT[1..i-1] 选择pare nt为0且weight最小的两个节点,其序号分别
为si和s2
Select(HT,i-1,s1,s2);
HT[s1].pare nt = i;
HT[s2].pare nt = i;
HT[i].lchild = si;
HT[i].rchild = s2;
HT[i].weight = HT[s1].weight + HT[s2].weight;
}
//---- 从叶子到根逆向求每个字符的赫夫曼编码 ----
HC = (Huffma nCode)malloc(( n+1)*s
您可能关注的文档
- 观摩课教学活动总结.docx
- 管道疏通剂的主要成分和工作原理教学文案.docx
- 锅炉设备拆除运输安全协议.docx
- 国际关系理论思想范式与命题讲课稿.docx
- 和声分析351例教学文案.docx
- 护理公休座谈会记录教程文件.docx
- 沪教版三年级数学下册复习进程.docx
- 急救车抢救药品一览表及抢救物品平面资料.docx
- 急救箱内药品清单.docx
- 急性脑血管病的应急预案与处理流程演示教学.docx
- 《广西地表水环境质量监测质量控制技术与评价》(征求意见稿)编制说明.docx
- 《碳化硅用高温高能离子注入机铝离子源技术规范》标准征求意见稿.docx
- 水利水电工程施工应急资源配备与调度指南(征求意见稿).pdf
- 预印本论文审核指南-标准_征求意见稿.docx
- 《盐碱地食用豆优质高效种植技术规程》征求意见稿.docx
- 老年人饮用包装饮用水(征求意见稿).pdf
- 水产遗传育种数据库构建与共享规范(征求意见稿).docx
- 《航空航天UNJ螺纹 一般要求和极限尺寸》标准发展研究报告.docx
- 《飞机密封单稳态2A和3A继电器 第2部分:鉴定试验》标准立项与发展报告.docx
- 《航空器杠杆开关 性能要求 第2部分:Ⅲ类》国家标准立项发展报告.docx
最近下载
- 《纺织行业“十五五”发展纲要》及《纺织行业“十五五”绿色发展指.docx
- 第三单元名著导读《经典常谈》课件.pdf VIP
- 《新闻法规与职业道德》课件——新闻法律法规与职业道德概述.pptx VIP
- 2025年内初班(新)(答案完整齐全)内初班民族团结考试(带答案) .pdf VIP
- 初三有机合成题库及答案.doc VIP
- GXG 451-2016 信息通信建设工程费用定额 信息通信建设工程概预算编制规程.pdf VIP
- 幼儿园大班数学教学活动开展的现状研究.docx
- 李发海电机与拖动基础第四版第十一章方案.ppt VIP
- 2021年一级建造师考试《机电工程管理与实务》.docx VIP
- 三菱900mb maxiez故障代码.pdf VIP
原创力文档

文档评论(0)