6.6.1 赫夫曼树

博客主要介绍了赫夫曼树,指出其可以是最优二叉树或最优多分支树,本次聚焦最优二叉树,阐述了路径、路径长度等相关概念及树的带权路径长度计算方式,通过示例说明了赫夫曼树的判定,还介绍了赫夫曼算法的步骤。

赫夫曼树

  • 又叫做最优树;可以是最优二叉树,也可以是最优多分支树。
    本次只讨论最优二叉树。
    赫夫曼树中没有度为1的结点

最优二叉树

  • 常用定义
    路径:从树中一个结点另一个结点之间的分支就构成了这两个结点之间的路径。
    路径长度:路径上的分支数目 (有几根线)。
    树的路径长度:从树根每一结点的路径长度之和。
    结点的权:由实际问题来决定。一般就是结点数据域的值。(如报文问题中,每种报文字符出现的次数)
    结点的带权路径长度:从该结点到树根之间的路径长度该结点的权的乘积。
    树的带权路径长度:树中所有叶子结点的带权路径长度之和。WPL = ∑ Wk * Lk
    最优二叉树 / 赫夫曼树:假设有n个权值{ W1 , W2 , … , Wn } , 试构造一棵有n个叶子结点的二叉树,每个叶子结点带权为Wi , 则其中带权路径长度 WPL 最小的二叉树称为最优二叉树 / 赫夫曼树。

  • 示例
    如下图,3棵二叉树,每个都有4个叶子结点a , b , c , d,分别带权 7 , 5 , 2 , 4。
    (a) WPL = 7 * 2 + 5 * 2 + 2 * 2 + 4 * 2 = 36
    (b) WPL = 4 * 2 + 7 * 3 + 5 * 3 + 2 * 1 = 46
    © WPL = 7 * 1 + 5 * 2 + 3 * 2 + 4 * 3 = 35
    树c 的 叶子结点带权路径长度和最小,所以树c 是赫夫曼树
    在这里插入图片描述

赫夫曼算法

  • 步骤
    (1) 根据给定的n个权值 { W1 , W2 , … , Wn } 构成n 棵二叉树的集合 F = { T1 , T2 , … , Tn } , 每棵二叉树 Ti 只有一个带权为 Wi 的根结点,左右子树均为空。
    (2) 在 F 中选取两棵根结点的权值最小的树作为左右子树构造一棵新的二叉树,并且置新的二叉树的根结点的权值为其左右子树上的根结点的权值之和
    (3) 在 F 中删除这两棵树,同时将新得到的二叉树加入到 F 中。
    (4) 重复 (2) 和 (3) , 直到 F 只含一棵树为止。

在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值