huffman树.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
3.最小代价子母树 (1)问题描述 ??? 最优化原理应在子问题求解中体现。有些问题也允许顺推。 给定一个正整数序列a(1),a(2),...,a(n)不改变序列中每个元素在序列中的位置,把它们相加,井用括号记每次加法所得的和,称为中间和。 编程完成任务: 1·添上n-l对括号,加法运算依括号顺序进行,得到n-l个中间和; 2·求出使中间和最少的添括号方法。 例如给出序列是4,1,2,3。 第一种添括号方法: ((4+1)+(2+3))=((5)+(5))=(10), 有三个中间和是5,5,10,它们之和为:5+5+10=20, 第二种添括号方法:(4+((1+2)+3))=(4+((3)+3))=(4+(6))=(10), 中间和是3,6,10,它们之和为19。 (2)算法分折 1·把序列的n个数,看成二元树的叶子(二叉树)的权。如果用一种括号把两个正整数括起来,则它们对应结点的父辈的权就是由这次加法产生的中间和。这样就把对序列任何一种加括号的方法与一棵带权的二元树对应。上面例子中加括号方法对应二元树如图 一棵带权二元树的代价就是树中所有根结点权之和。代价最小的带权二元树称为最优二元树。问题转化为求最优带权二元树。 那么,什么是最优带权二元树呢? 最优二叉树,又称哈夫曼树,是一类带权路径长度最短的树,有着广泛的应用。 我们首先给出路径和路径长度的概念。从树中一个结点到另一个结点之间的分支构成这两个结点之间的路径,路径上的分支数目称做路径长度。树的路径长度是从树根到每一结点的路径长度之和。这种路径长度最短的二叉树是。 若将上述概念推广到一般情况,考虑带权的结点。结点的带权路径长度为从该结点树根之间的路径长度与结点上权的乘积。树的带权路径长度为树中所有叶子结点的带路径长度之和,通常记作 ?? WPL=∑W(k)L(k)???? k=1...n 假设有n个权值W(1),W(2),......,W(n),试构造一棵有n个叶子结点的二叉树,每个叶子结点带权为W(k),则其中带权路径长度WPL最小的二叉树称做最优二又树或哈夫显树。 例如,图中的两棵二叉树,都有4个叶子结点a、b、c、d,分别带权4,1,2,3,它们的带权路径长度分别为 (a)WPL=4×2十1×2十2×2十3×2=20 (b)WPL=4×1十1×3十2×3十3×2=19 如何构造哈夫曼树呢?俗称哈夫曼算法。现叙述如下: (1)根据给定的n个权值W(1),W(2),......,W(n)构成n棵二叉树的集合F={T(1),T(2),......,T(n)} 其中每棵二叉树T(k)中只有一个带权为W(k)的根结点,其左右子树均空。 (2)在F中选取两棵根结点的权值最小的树作为左右子树构造一棵新的二叉树,且置新的二叉树的根结点的权值为其左、右子树上根结点的权值之和。 (3)在F中删除这两棵树,同时将新得到的二叉树加入F中。 (4)重复(2)和(3),直到F只含一棵树为止。这棵树便是哈夫曼树。 2·如果一棵带权的二元树是最优的,那末它的任何一棵子树对于这棵子树的树叶来说也是最优的。因此,带权最优二元树的问题符合最优化原则。可以用动态归划方法求解。 3·对于这个问题在决策时要考虑到树叶序列的划分方案。 [状态分析] 1·从序列4,4,8,5,4,3,5分析它的二元权的结构。图给出两棵二元树(a)、(b)。 ??? 这棵7片叶叶的二元树,图(a)中的树的左子树是三片叶子,右子树是4片叶子,对应于树叶的一种划分方案。记为(左3,右4)。对应添号形式是:(4+4)+8)+((5+4)+(3+5)))其代价和为91。 图(b)对应于另一种划分方案记为(左4,右3),其代价和是94。可见,由于树叶的划分方案不同,所得的二元树的代价也不同。对七片叶子的二元树,可以有 (左1,右6),(左2,右5),(左3,右4),(左4,右3),(左5,右2),(左6,右1)六种划分方法,对于每一种划分方法都对元一棵二元树,从中找出最优的二元树。 2·决策的前提是最优化原理。对于每一种划分方案,比如(左3,右4),应该知道前三数4,4,8作为树叶构成最优的子二元树是什么,也应知道5,4,3,5作为树叶构成最优二元树的最优子二元树是什么。根据最优化原理,由这棵最优子二元树合成的二元树一定是对于(左3,右4)划分方案最优二元树。从此可见,二元树的构成中每一步的决策不仅与前一步决定有关,而且与若干步的决策有关。二元树的代价计算是一个递推过程。我们选用序列4,4,8,5,4,3,5把它可能构成的各类带权二元树的代价与权的递推计算方法表示如图中。 计算方法说明如下, [1]一片树叶权重为叶片的权,代价为0,得图的第一层。 [2]二片树叶。它的构成状态共有:(4,4),(4,8)

文档评论(0)

ziyuan8 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档