11.哈夫曼树和哈夫曼编码

哈夫曼树,是二叉树的一种很主要的应用。

一、哈夫曼树的定义

1.带权路径长度wpl

设二叉树具有n个带权值的叶结点,那么从根结点到各个叶结点的路径长度与相应结点权值的乘积的和,叫做带权路径长度wpl(weighted path length)
W P L = ∑ i = 1 n w i l i WPL = \sum_{i=1}^{n}w_il_i WPL=i=1nwili
在这里插入图片描述

1.相同的叶子结点,可以构造出不同的哈夫曼树。

在这里插入图片描述

2.权值越大的叶结点,越接近根,整个哈夫曼树的wpl就会越小。

2.哈夫曼树

我们把具有最小带权路径长度的二叉树称为 哈夫曼树(也称为最优树)

二、构造哈夫曼树。

1.构造原则:
  • (1)权值越大的叶结点约靠近根结点。
  • (2)权值约小的叶子结点,越远离根结点。

2.构造过程

  1. 给定的n个权值{ w 1 , w 2 , . . . , w n w_1,w_2,...,w_n w1,w2,...,wn}构造n棵只有一个叶结点的二叉树,从而得到一个二叉树的集合F={ T 1 , T 2 , . . . , T 3 {T_1,T_2,...,T_3} T1,T2,...,T3}.
  2. 在F中选取根结点的权值最小和次小的两棵二叉树作为左、右子树构造一棵新的二叉树,这颗新的二叉树根结点的权值为其左、右子树根结点权值之和。
  3. 在集合中删除作为左、右子树的两棵二叉树,并将新建立的二叉树加入到集合F中。

动画模拟参考:https://www.bilibili.com/video/BV1hK4y1k7Wr

在这里插入图片描述

上图 的wpl 可以用加和公式,也可以用所有非叶子结点的和。求出。

3.有 n 0 n_0 n0个叶子结点,会有多少个结点。

哈夫曼树,没有度为1 的结点。

根据 n = n 0 + n 1 + n 2 ; n 0 = n 2 + 1 ( 二 叉 树 性 质 ) ; = > n = 2 n 0 − 1 n= n_0+n_1+n2; n_0=n_2+1(二叉树性质);=> n = 2n_0-1 n=n0+n1+n2;n0=n2+1();=>n=2n01

三、哈夫曼编码

规定哈夫曼树中的做分支为0,右分支为1,则从根节点到每个叶结点所经过的分支对应的0和1组成的序列便是该结点对应字符的编码。这样的编码称为哈夫曼编码。

  1. 不等长编码:出现频率高的,编码短;频率低的编码长,大大降低总编码长度。
  2. 前缀码:在一组字符的哈夫曼编码中,不可能出现一个字符的哈夫曼编码是另一个字符哈夫曼编码的前缀。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值