哈夫曼

哈夫曼


 

一、最优树的定义:

  结点的路径长度定义为:从根结点到该结点的路径上分支的数目。
  树的路径长度定义为:树中每个结点的路径长度之和。
  树的带权路径长度定义为:树中所有叶子结点的带权路径长度之和
  WPL(T) = (对所有叶子结点)
  在所有含有n个叶子结点、并带有相同权值的m叉树中,必存在一棵其带权路径长度取最小值的树,称为最优树。


 

二、如何构造最优树:

哈夫曼算法,以二叉树为例:
(1)根据给定的n个权值{W1,W2,W3...Wn},构造n棵二叉树的集合F={T1,T2...Tn},
其中每棵二叉树中均只含一个带权值为Wi的根结点,其左、右树为空树。
(2)在F中选取其根结点的权值为最小的两棵二叉树,分别作为左、右子树构造
一棵新的二叉树,并置这棵新的二叉树根结点的权值为其左、右子树根结点的权值之和。
(3)从F中删去这两棵树,同时加入刚生成的新树。
(4)重复(2)和(3)两步,直至F中只含一棵树为止。

 


 

三、哈夫曼编码思想:

1、将构成电文的每个不同字符作为叶子结点,其权值为电文中字符的使用频率或次数,构造哈夫曼树;

2、此哈夫曼树中从根到每个叶子结点都有一条唯一的路径,对路径上各分支约定,做分支标识为0码,右标识为1码;

3、则从根结点到叶子结点的路径上分支的0、1码组成的字符串即为该叶子结点的哈夫曼编码。

 


四、指令的变长编码:

若要设计长短不等的编码,则必须是任一字符的编码都不是另一个字符编码的前缀,这种编码称作前缀编码。
哈夫曼编码就是使电文长度最短的前缀编码。


 

五:试题:
用二进制来编码字符串“abcdabeaa”,需要能够根据编码,解码回原来的字符串,最少需要多长的二进制字符串?
A、17
B、18
C、19
D、29
解题步骤:
a出现4次,b出现2次,c出现1次,d出现1次,e出现1次。
画哈夫曼树:
                          9
                5                4(a)
      2                       3
1(c)   1(d)       1(e)     2(b)
即:
a:1 b:011 c:000 d:001 e:010
长度:a是4次,长度为4,其他长度都是3,其他字符有5个,
所以:4*1+5*3=19。


 

posted @ 2019-04-01 11:48  学知无涯  阅读(789)  评论(0编辑  收藏  举报