霍夫曼编码

霍夫曼树又称最优二叉树,是一种带权路径长度最短的二叉树。所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的路径长度(若根结点为0层,叶结点到根结点的路径长度为叶结点的层数)。树的路径长度是从树根到每一结点的路径长度之和,记为WPL=(W1*L1+W2*L2+W3*L3+...+Wn*Ln),N个权值Wi(i=1,2,...n)构成一棵有N个叶结点的二叉树,相应的叶结点的路径长度为Li(i=1,2,...n)。可以证明霍夫曼树的WPL是最小的。

霍夫曼树常处理符号编写工作。根据整组数据中符号出现的频率高低,决定如何给符号编码。如果符号出现的频率越高,则给符号的编码越短;如果符号出现的频率越低,则给的符号的编码越长。

进行霍夫曼编码

假设我们要给一个英文单字"F O R G E T"进行霍夫曼编码,而每个英文字母出现的频率如下:
这里写图片描述

Step1:创建一个霍夫曼树
⒈ 将每个英文字母依照出现频率由小排到大,最小在左。
⒉ 每个字母都代表一个终端节点(叶节点),比较F.O.R.G.E.T六个字母中每个字母的出现频率,将最小的两个字母频率相加合成一个新的节点。发现FO的频率最小,故相加2+3=5
⒊ 比较5.R.G.E.T,发现RG的频率最小,故相加4+4=8
⒋ 比较5.8.E.T,发现5E的频率最小,故相加5+5=10
⒌ 比较8.10.T,发现8T的频率最小,故相加8+7=15
⒍ 最后剩10.15,没有可以比较的对象,相加10+15=25

最后产生的树状图就是霍夫曼树,下图演示了构造霍夫曼树的过程:
霍夫曼编码

Step2:编码
1. 给霍夫曼树的所有左链接'0'与右链接'1'
2. 从树根至树叶依序记录所有字母的编码,如下图:
结果


Ref
https://zh.wikipedia.org/wiki/%E9%9C%8D%E5%A4%AB%E6%9B%BC%E7%BC%96%E7%A0%81

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值