- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编程教学 哈夫曼树及其应用
6.6哈夫曼树及其应用 6.6.1最优二叉树 1.相关概念 路径:从树中一个结点到另一个结点所经过的分支序列或者说结点序列。 如结点A到结点F的路径为: A-B-E-F 路径长度:路径上面的分支个数。 如A-F的路径长度为3。 树的路径长度:从树根到每一个结点的路径长度之和。 如左边树的路径长度为: Len(A-B)+ Len(A-C)+ Len(A-D)+ Len(A-E)+ Len(A-F)+ Len(A-G) =1+1+2+2+3+3=12 结点的权值:在某些应用中,树中结点往往要和一定的数值联系起来,那么这个数值通常称为该结点的权值,简称权。 如左图。 结点的带权路径长度:该结点到根结点的路径长度与该结点上权的乘积。 如结点E的带权路径长度为:Len(E-A)*3=2*3=6 树的带权路径长度: 树中所有叶子结点的带权路径长度之和。 记作: WPL=w1*L1+w2*L2+……+wn*Ln 最优二叉树(哈夫曼树):给定n个权值{w1,w2,…,wn},试构造一棵有n个叶子结点的二叉树,每个叶子结点带权为wi。构造出来的二叉树的形态可以有多个,我们把其中带权路径长度WPL最小的二叉树称作最优二叉树或者哈夫曼树。 2.哈夫曼算法 (1) 如何构造一棵哈夫曼树。 我们首先通过一个例子来演示一下构造过程。 当权值为{7,5,2,4}时,构造哈夫曼树。 当权值为{7,5,2,4}时,构造哈夫曼树。 当权值为{7,5,2,4}时,构造哈夫曼树。 当权值为{7,5,2,4}时,构造哈夫曼树。 当权值为{7,5,2,4}时,构造哈夫曼树。 当权值为{7,5,2,4}时,构造哈夫曼树。 (2)哈夫曼算法的语言描述 根据给定的n个权值{w1,w2,…,wn}构成n棵二叉树的集合F={T1,T2,…,Tn},其中每棵二叉树Ti中只有一个带权为wi的根结点,其左右子树为空。 在F中选取两棵根结点的权值最小的树作为左右子树构造一棵新的二叉树,且置新的二叉树的根结点的权值为其左右子树上根结点的权值之和。 在F中删除这两棵树,同时将新得到的二叉树加入F中。 重复②和③,直到F只含一棵树为止。这棵树便是哈夫曼树。 6.6.2 哈夫曼编码 对于字符串“ABACCDA”,共有7个字符,4种字符。其中A、B、C、D出现的次数分别为3、1、2、1。 现在要对字符串进行0、1编码,有哪些方法?哪一种编码的长度最短? 1.各种编码方式 (1)定长编码---根据出现的字符种数进行编码 字符串“ABACCDA”中共出现4种字符,那么可以用2位表示。 1.各种编码方式 (1)定长编码---根据出现的字符种数进行编码 这种编码方式可以对应到二叉树,如右图所式 1.各种编码方式 (2)变长编码 当A、B、C、D按照如下形式进行编码时。 1.各种编码方式 (2)变长编码 这种编码方式也可以对应到二叉树,如右图所式 1.各种编码方式 (2)变长编码 如当A、B、C、D按照如下形式进行编码时。 1.各种编码方式 (2)变长编码 这样,这些编码恢复成二叉树的形式时,不会形成A,B,C,D恰好为二叉树的叶子结点,如右图 1.各种编码方式 从上面的分析可以看出,一个可用的编码必须满足每个字符的编码不能是其他编码的前缀。 也可以看出,每一个可用的编码都可以转化成二叉树的形式,这样编码理论便可以与二叉树的一些性质结合起来,就可以应用二叉树的理论知识来解决编码问题。 1.各种编码方式 (3)哈夫曼编码 假设编码过程中有以下对应关系: 1.各种编码方式 (3)哈夫曼编码 对于字符串“ABACCDA”,共有7个字符,4种字符。其中A、B、C、D出现的次数分别为3、1、2、1。根据权值{3,1,2,1} 构造哈夫曼树 对于字符串“ABACCDA”,共有7个字符,4种字符。其中A、B、C、D出现的次数分别为3、1、2、1。根据权值{3,1,2,1} 构造哈夫曼树 对于字符串“ABACCDA”,共有7个字符,4种字符。其中A、B、C、D出现的次数分别为3、1、2、1。根据权值{3,1,2,1} 构造哈夫曼树 对于字符串“ABACCDA”,共有7个字符,4种字符。其中A、B、C、D出现的次数分别为3、1、2、1。根据权值{3,1,2,1} 构造哈夫曼树 对于字符串“ABACCDA”,共有7个字符,4种字符。其中A、B、C、D出现的次数分别为3、1、2、1。根据权值{3,1,2,1} 构造哈夫曼树 对于字符串“ABACCDA”,共有7个字符,4种字符。其中A、B、C、D出现的次数分别为3、1、2、1。根据权值{3,1,2,1} 构造哈夫曼树 对于字符串“ABACCDA”,共有7个字符,4种字符。
文档评论(0)