- 1、本文档共4页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
浅谈赫夫曼编码
浅谈赫夫曼编码
电子科技大学
数理基础科学班
摘要:本文通过引入赫夫曼树的一些概念,进而介绍赫夫曼树的应用——赫夫曼编码并设计程序实现。
关键词:赫夫曼树,赫夫曼编码。
首先介绍赫夫曼树的定义及其相关概念以及构造方法。
赫夫曼树:给定n个权值作为n个叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman tree)。
路径和路径长度:在一棵树中,从一个结点往下可以达到的孩子或子孙结点之间的通路,称为路径。通路中分支的数目称为路径长度。若规定根结点的层数为1,则从根结点到第L层结点的路径长度为L-1。
结点的权及带权路径长度:若将树中结点赋给一个有着某种含义的数值,则这个数值称为该结点的权。结点的带权路径长度为:从根结点到该结点之间的路径长度与该结点的权的乘积。
树的带权路径长度:树的带权路径长度规定为所有叶子结点带权路径长度之和,记为WPL。
赫夫曼树的构造:
假设有n个权值,则构造出的哈夫曼树有n个叶子结点。 n个权值分别设为 w1、w2、…、wn,则哈夫曼树的构造规则为:
(1)将w1、w2、…,wn看成是有n 棵树的森林(每棵树仅有一个结点);
(2)在森林中选出两个根结点的权值最小的树合并,作为一棵新树的左、右子树,且新树的根结点权值为其左、右子树根结点权值之和;
(3)从森林中删除选取的两棵树,并将新树加入森林;
(4)重复(2)、(3)步,直到森林中只剩一棵树为止,该树即为所求得的哈夫曼树。
以下介绍赫夫曼树的应用——赫夫曼编码。
目前,进行快速远距离通信的主要手段是电报,即将需传送的文字转换成由二进制的字符组成的字符串。例如ABCD,可用00表示A,01表示B,10表示C,11表示D。示ABCD。实际生活中,我们希望编码的长度尽可能的短。一方面,也许我们可以用0表示A,用1表示B,用00表示C,用01表示D,可是这时我们发现ABCD的译码为010001,可是010001却可以表示DACD,ABAAD,ABAAAB......另一方面,我们需要根据每个电文字符出现的频率设计每个字符的编码长度。所以,我们设计的编码应满足以下条件:
(1)任一个字符的编码不是另一个字符的编码的前缀;(我们称为前缀编码)
(2)设计的长度应尽可能的短。
而利用赫夫曼树的性质我们可以将每个字符看成一个叶子节点(不妨设有n个字符),每个节点的权值为这个字符在电文中出现的频率,建立一棵赫夫曼树。
从根节点出发,左分支代表0,右分支代表1,一直到叶子节点,则依次从根节点到叶子节点走过的路径上每一条分支产生了一个编码,这个编码就是这个叶子节点的编码。设每个字符(叶子节点)在电文中出现频率(权值)为Wi(1=i=n),
相应的编码长度(路径长度)为Li(1=i=n),则显然ΣWi*Li最小,即电文长度最小。
基于以上理论,我们可以设计程序求出赫夫曼编码。
(算法描述在程序中将详细描述)
#includestdio.h
#includestring.h
#define MAXN 55
typedef struct
{ char alpha; //定义赫夫曼树结构体,包含字符,权值,双亲,左右孩子
int weight;
int parent;
int lchild;
int rchild;
}HuffmanTree;
HuffmanTree HT[MAXN];
int s1,s2; //s1,s2表示指向最小的两个数的指针
main()
{ int N,i,j,k,f,r,x,y,deep; //N表示电文中字符种类个数,deep表示深度
char HC[MAXN][MAXN];
memset(HC,0,sizeof(HC)); //初始化
memset(HT,0,sizeof(HT));
scanf(%d,N); //输入字符个数
getchar();
for(i=1;i=N;i++) //输入每个字符的频率(权值)
{HT[i].alpha=getchar();
getchar();
}
for(i=1;i=N;i++)
scanf(%d,HT[i].weight);
for(i=N+1;i=2*N-1;i++) //建赫夫曼树,在HT[1..N]中
{for(j=1;j=i-1;j++) //利用比较法求得权值最小的两
if(HT[j].parent==0) //个节点,用s1表示最小的,s2表示次小的.
{x=j;brea
您可能关注的文档
- 大豆蚜嗅觉在选择寄主植物中的作用.pdf
- 070523电气系统中浪涌保护器的雷电流能量配合设计.pdf
- 好词好句好段之描写飞禽走兽虫鱼牛马猪羊鸡鹅等动物.doc
- 人教版七年级下语文期末试卷.doc
- 假如孩子高考落榜该如何帮助孩子面对?.doc
- 3.3 储层岩石中的毛管压力.ppt
- 如何做到少讲多练.ppt
- 中国最美十大海滩 盛夏到临去避暑.doc
- 如何删除掉选择题当中的答案部分.docx
- 萨克斯管演奏中的气息.doc
- 2025年网络文学平台版权运营模式创新与版权保护体系构建.docx
- 数字藏品市场运营策略洞察:2025年市场风险与应对策略分析.docx
- 全球新能源汽车产业政策法规与市场前景白皮书.docx
- 工业互联网平台安全标准制定:安全防护与合规性监管策略.docx
- 剧本杀剧本创作审核标准2025年优化与行业自律.docx
- 2025年新能源电动巡逻车在城市安防中的应用对城市环境的影响分析.docx
- 全渠道零售案例精选:2025年行业创新实践报告.docx
- 2025年网约车司乘纠纷处理机制优化与行业可持续发展报告.docx
- 2025年宠物烘焙食品市场法规政策解读:合规经营与风险规避.docx
- 2025年宠物行业数据安全监管政策影响分析报告.docx
文档评论(0)