- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数 据 结 构
课
程
设
计
设 计 题 目 赫 夫 曼 树
年 级 专 业
学 生 姓 名
学 生 学 号
指 导 老 师
目 录
摘要………………………………………2
问题分析和任务定义……………………2
逻辑设计…………………………………2
详细设计…………………………………3
程序编码…………………………………4
程序调试与测试…………………………7
结果分析…………………………………7
设计创新及心得…………………………8
参考文献…………………………………8
设计摘要:
对于赫夫曼编码问题,在构造赫夫曼树时又要求能方便地实现从孩子结点到双亲结点的操作。因此,设计赫夫曼树的结点存储结构为双亲孩子存储结构。若有n个权值{w1,w2,……,wn},构造一棵有n个叶子结点的二叉树,每个叶子结点带权为wi,则其中带权路径长度WPL最小的二叉树称做赫夫曼树。根据定义,一棵二叉树要使其带权路径长度WPL值最小,必须使权值越大的叶结点越靠近根结点。
赫夫曼算法:
(1)根据给定的n个权值{w1,w2,……,wn}构成n棵二叉树的集合F={T1,T2,……,Tn},其中每棵二叉树Ti中只有一个带权为wi的根结点,其左右子树均空。
(2)在F中选取两棵根结点的权值最小的树作为左右子树构造一棵新的二叉树,且置新的二叉树的根结点的权值为其左右子树上根结点的权值之和。
(3)在F中删除这两棵树,同时将所得到的二叉树加入F中。
(4)重复(2)和(3),直到F只含一棵树为止。这棵树便是赫夫曼树。赫夫曼树可用于构造代码总长度最短的编码方案。
方法如下:
设需要编码的字符集合为{d1,d2,……,dn},各个字符在电文中出现的次数集合为{w1,w2,……,wn},以d1,d2,……,dn作为叶结点,以w1,w2,……,wn作为各叶结点的权值构造一棵二叉树,规定赫夫曼树中的左分支为0,右分支为1,则从根结点到每个叶结点所经过的分支对应的0和1组成的序列便为该结点对应字符的编码。这样的代码总长度最短的不等长编码称为赫夫曼编码。
(一)问题分析和任务定义:
对于一组具有确定权值的叶结点可以构造出多个具有不同带权路径长度的二叉树,其中具有最小带权路径长度的二叉树称作赫夫曼树(或称最优二叉树)。利用赫夫曼树构造法建立最优二叉树函数,输入一段文本,能将其转换为赫夫曼编码,并以文件的方式保存。通过赫夫曼树转换成编码,对解决实际问题很有帮助。限制条件是所建立的二叉树中不存在度数为1的结点。
(二)逻辑设计:先建立赫夫曼树,然后再求赫夫曼编码。
①赫夫曼树haffTree初始化 。n个叶结点的二叉树共有2n-1个结点
算法如下:
for(i=0;i2*n-1;i++)
{
huff_node [i].weight=0;
huff_node[i].parent=0;
huff_node[i].flag=0;
huff_node[i].lchild=-1;
huff_node[i].rchild=-1;
}
②构造赫夫曼树的算法如下所示:
for(i=0;in-1;i++)
{
m1=m2=MAX;
x1=x2=0;
for(j=0;jn+i;j++)
{
if (huff_node[j].weightm1huff_node[j].flag==0)
{
m2=m1;
x2=x1;
m1=huff_node[j].weight;
x1=j;
}
else if (huff_node[j].weightm2huff_node[j].flag==0)
{
m2=huff_node[j].weight;
x2=j;
}
}
③求字符的赫夫曼编码的算法如下所示:
for(i=0;in;i++)
{
cd.start=n;
c=i;
p=huff_node[c].parent;
while(p!=0)
{
if(huff_node[p].lchild==c)
cd.bits[cd.start]=0;
else
cd.bits[cd.start]=1;
您可能关注的文档
最近下载
- 《特种设备重大事故隐患判定准则》GB45067-2024培训.pptx VIP
- 小学美术教学案例的生成式AI智能创作与艺术教育创新实践教学研究课题报告.docx
- 100T汽车吊操作手册.pdf VIP
- 入户供热维修操作技能培训.pptx VIP
- 《浏阳河随想》古典吉他独奏谱.pdf VIP
- 2024新教材七上道德与法治早背晚默.docx VIP
- 最新特种玻璃精品课件.ppt VIP
- 九上道德与法治39天早背晚默.pdf VIP
- 初中英语新人教版七年级上册全册单词默写练习(附参考答案)(2024秋).pdf VIP
- 70篇短文记完初中1600核心词汇143页 【单词批注版】【高清精美排版】.doc VIP
文档评论(0)