哈夫曼树

1、树的路径长度算法

  • 两个节点之间的路径长度(PL)是链接两节点的路径上的分支数。如图1中,节点七、8到29的PL都为2,节点1五、14到29的PL都为1.
  • 树的外部路径长度:各叶节点到根节点的路径长度之和(EPL)。如图1中,叶节点有七、八、14,分别到根节点的路径为二、二、1,那么EPL为5.
  • 树的内部路径长度:各非叶节点到根节点的路径长度之和(IPL)。如图1中,非叶节点有1五、29,分别到根节点的路径为一、0,那么IPL为1.
  • 树的路径长度:PL=EPL+IPL,则PL=5+1=6

图1:           图2:spa

n个节点的二叉树的路径长度不小于下述数列前n项之和(从根节点出发,从左到右编号),即blog

PL=Σi[log2i]=0+1+1+2+2+2+2+3+3+3+3+3+3+3+3+4+…([log2i]取整数)二叉树

其路径长度最小者为 PL=Σi[log2i],只有彻底二叉树知足才要求PL=Σi[log2i]im

图1为彻底二叉树,图2不是彻底二叉树,其PL 大于 Σi[log2i]。img

2、带权路径长度co

不少应用问题中为树的叶节点赋予一个权值,用于表示出现频度、几率值等。所以,在问题处理中把叶节点定义得不一样于非叶节点,把叶节点看做“外节点”,非叶节点看做“内节点”。这样的二叉树称为扩充二叉树。ps

扩充二叉树中只有度为2的内节点和度为0的外节点。根据彻底二叉树的性质,有n个外节点就有n-1个内节点,总节点数为2n-1.分支

若一颗扩充二叉树有n个外节点,第i个外节点的权值为wi,它到根的路径长度为li,则该外节点到根的带权路径长度为wi*li

扩充二叉树的带权路径长度:树的各外节点到根的带权路径长度之和,即WPL=Σi(wi*li)

对于一样的一组权值,放在外节点上,树的组织方式不一样,带权路径长度也不一样。

如图1:WPL=15*1+14*1+7*2+8*2,如何使得扩充二叉树的带权路径长度最小,当权值大的值离根近,权值小的离根远,则最小。

Huffman树

在带权路径长度达到最小的扩充二叉树即为Huffman树。在Huffman树中,权值大的节点离根最近。

哈夫曼树的构造算法:

1)由给定的n个权值{w0,w1,w2……wn-1},构造具备n颗扩充二叉树的森林F={F0,F1,F2……Fn-1},其中每颗扩充二叉树Ti只有一个带权值wi的根节点,其左右子树均为空。

2)重复如下步骤,直到F中仅剩一颗树为止:

  • 在F中选取两颗根节点的权值最小的扩充二叉树,做为左、右子树构造一颗新的二叉树。置新的二叉树的根节点的权值为其左、右子树上根节点的权值之和。
  • 把F中删去这两颗二叉树
  • 把新的二叉树加入F
相关文章
相关标签/搜索