快速掌握哈弗曼树

哈弗曼树的基本定义

哈弗曼树又称最优数,是一类带权路径长最短的树。
看看里面涉及的概念:
(1)路径:从树的一个节点到另一个节点之间的分支构成了这两个节点之间的路径
(2)路径长度:路径上的分支数目
(3)树的路径长度:从树根到每一个节点的路径长度之和
(4):这个在数学上有相似的定义,可以相似的理解
(5)节点的带权路径长度:树中所有带权路径长度之和
(6)哈弗曼树:假设有n个叶子节点的二叉树,每个叶子节点都有权重,使得带权路径长度WPL最小的二叉树就叫做最优二叉树或哈弗曼树。

单看概念很难看懂,我们就拿一个实在的例子来进行说明:
在这里插入图片描述

哈弗曼树的构造算法:

给定叶子结点个数和相应的权重的情况下,如何构造哈弗曼树呢?
我们还是看一个实际的例子吧:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述注意:哈弗曼树是一种二叉树,由于哈弗曼树中没有度为1的节点,那么,根据n0=n2+1可知,一颗有n个叶子节点的哈弗曼树一共有2n-1个节点,可以存储在大小为2n-1的一维数组中。

哈弗曼编码

什么叫哈夫曼编码呢?
同样的,为了方便理解,我们还是用图来进行说明:
在上面的图中,我们已经找到了一个哈夫曼树,我们只要将树的左子树全部编码为0,右子树全部编码为1(或者相反的方式进行编码,就可以得到每一个叶子节点的哈弗曼编码了)
在这里插入图片描述那么有:
A:000
B:001
C:01
D:10
E:11
我们会发现,哈夫曼编码不会出现前缀的现象。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值