霍夫曼树简述

哈夫曼树:给定N个权值作为N个叶子结点,构造二叉树,若该树的带权路径长度达到最小,称为最优二叉树,哈夫曼树(Huffman Tree),哈夫曼树是带权路径长度最短的树。权值较大的结点离根较近。

初始节点都在树的叶子节点上

权值大的节点离根更近

每个非叶子节点都有两个子叶(自下向上构造,两个子叶构成新树的根节点)

哈夫曼树是按照贪心思想和规则构造,构造的树的权值最小。

哈夫曼树的 WPL 是树的所有叶结点的带权路径长度之和。

WPL计算方法: WPL = sum(Wi * Li) ,Wi是第i个节点的权值(value)。Li是第i个节点的长(深)度。

霍夫曼树的构造:有 n 个节点

· 在n个节点中找到两个最小权值节点(根),构建一棵新树(根节点权值为左右子叶权值和)

· 删掉使用的两个子叶,剩余(n-2)个节点,再加入构建的新节点,现在共有 (n-1) 个节点

· 重复上面操作,一直到所有节点都被处理

霍夫曼编码:霍夫曼树的重要应用,可变字长编码(VLC)的一种;依据字符出现概率来构造异字头的平均长度最短的码字,有时称之为最佳编码。

哈夫曼编码的目的是为了减少存储体积,以一个连续的字符串为例:aaaaaaaaaabbbbbcccdde

如使用二进制表示:a:0001;b:0010;c:0011;d:0100;e:0101

如果每个字符编码等长,则存储空间无法优化,都是单个字符长度 * 字符个数

果每个字符编码不等长,则设计的开放性就很强了。

例如:

a为01,b为1,  二进制:010101010111

a为1,  b为01,二进制:111110101

a为1,  b为0,  二进制:1111100

设计编码要考虑让出现多的尽量更短,出现少的可以长一些。

计算机只知道0\1二进制,而二叉树有左右两个节点,一个字符如果对应叶子节点,可以直接确定,也就是这个数值如果映射成一个二叉树则字符不能存在非叶子节点上。

哈夫曼编码流程,先统计字符出现的次数,将这个次数当成权值按照上面的方法构造一棵哈夫曼树,左为0,右为1,每个叶子节点得到的二进制数字就是其编码,这样频率高的字符在上面,这样编码更短更节省空间。

参考:https://mp.weixin.qq.com/s/PFukWhKRuz7mMN5cp8OktQ 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值