赫夫曼树定义原理说明

赫夫曼树定义原理说明

从树(二叉树)中一个结点到另一个结点之间的分支构成两个结点之间的路径,路径上分支数目称做路径长度。
树的路径长度是从树根(根节点)到每个结点的路径长度之和
a图中,根节点到结点D的路径长度就为4,b图中根节点到D的路径长度为2.
a图中树的路径长度:1+1+2+2+3+3+4+4=20,b图中树的路径长度:1+2+3+3+2+1+2+2=16
在这里插入图片描述
假设有n个权值{w1,w2,…,wn},有n个结点的二叉树,每个结点带权wk,对应叶子的路径长度为lk,则其中带权路径长度WPL 最小的二叉树叫赫夫曼树(最优二叉树)
a图:WPL:51+152+403+304+104=315
b图:WPL:5
3+153+402+302+102=220

这个可以用来干啥,假设有10000个字母按照a图和b图带权分布(两个图字母对应的权重是一样的),那么对应用b图的结构进行比较会发现比较的次数会少很多

构造赫夫曼树的算法描述

  1. 根据n个权值{W1,W2,…,Wn}构成n颗对应的二叉树的集合T{T1,T2,…,Tn},一个Ti对应一个权值Wi,其左右子树均为空
  2. 在T中选取两颗权值最小的树作为左右子树构造一颗新的二叉树,且新的二叉树的根结点的权值为左右子树上的根结点的权值之和。
  3. 在T中将合并的子树删除,并将新的树放入T中
  4. 重复2,3步骤,知道T中只剩一颗树

赫夫曼编码

主要用于压缩数据,比如计算出一遍英文文章字母出现权重,然后计算出最优的赫夫曼树,然后根据赫夫曼树就可以得到对应字母的编码值(权值左分支为0,右分支为1),这样就可以得到一张编码表,然后数据压缩之后就可以节省存储的空间
在这里插入图片描述
左图的字母的权值是文章中字母出现的次数,右边是按规则修改后的的赫夫曼树
注意:设计长短不等的编码,必须是任一字符的编码都不是拎一个字符的编码的前缀,这种编码叫前缀编码(映射到赫夫曼树中就是,确定的节点的值就是上图的字符节点只能是叶子节点)

定义:需要编码的字符为T{T1,T2,…,Tn},,频率集合为{w1,w2,…,wn},根据构造赫夫曼树的算法构造赫夫曼树,然后规定赫夫曼树的左分支代表为0,右分支代表为1,从根节点到叶子结点所经过的路径分支组成的0和1序列就是该叶子结点(字符)对应的编码,这就是赫夫曼编码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值