赫夫曼树

来源:互联网 发布:女生减肥知乎 编辑:程序博客网 时间:2024/05/17 08:40

从树中一个结点到另一个结点之间的分支构成两个结点之间的路径,路径上的分支数目称做路径长度

树的路径长度就是从树根到每一个结点的路径长度之和。

结点的带权路径长度为从该结点到树根之间的路径长度与结点上权的乘积。

树的带权路径长度为树中所以叶子结点的带权路径长度之和。

带权路径长度WPL最小的二叉树称做赫夫曼树,也称最优二叉树


构造赫夫曼树:

(1)根据给定的n个权值{w1, w2, ......, wn}构成n棵二叉树的集合F={T1, T2, ......,Tn},其中每棵二叉树T1中只有一个带权为w1根结点,其左右子树为空。

(2)在F中选取两棵根结点的权值最小的树作为左右子树构造一棵新的二叉树,而且置新的二叉树的根结点的权值为左右子树上根结点的权值之和。

(3)在F中删除这两棵树,同时将新得到的二叉树加入到F中。

(4)重复2和3步骤,直到F只含一棵树为止。这棵树便是赫夫曼树。


若要设计长短不等的编码,则必须是任一字符的编码都不是另一个字符的编码的前缀,这种编码称做前缀编码。

赫夫曼编码:

一般的,设需要编码的字符集为{d1, d2, ......,dn},各个字符在电文中出现的次数或者频率集合为{w1, w2, ...., wn},以d1, d2, ......,dn作为叶子结点,以w1, w2, ...., wn作为相应叶子结点的权值来构造一棵赫夫曼树。规定赫夫曼树的左分支代表0,右分支代表1,则从根结点到叶子结点所经过的路径分支组成的0和1的序列便成为该结点对于字符的编码,这就是赫夫曼编码。


0 0
原创粉丝点击