哈夫曼树学习小记

本文介绍了哈夫曼树的概念及其在信息学中的应用。通过一个学生成绩判断的问题,阐述了如何利用哈夫曼树优化if判断顺序,从而提高效率。文章详细讲解了动态规划和贪心策略两种构造哈夫曼树的方法,并提供了相关算法的时间复杂度分析。
摘要由CSDN通过智能技术生成

B组又现我不会的神奇东西了……

定义:

现在有n个元素,每个元素有一个值。
你需要把这n个元素放在一棵二叉树的叶子节点上,规定每个元素的代价为它所在叶子节点的深度乘上它的值,哈夫曼树就是使总代价最小的这样一棵树。

运用:

据说哈夫曼树是一棵最佳判定树,什么意思呢?举一个实例来看看。

问题:

给出一群学生的成绩,要你判断每个学生的成绩情况(不同分数段有不同的评价)。

解法:

这是一道信息学入门题,一贯的做法是打一坨if。

理论上当然是O(n)的,因为判断非常少,但是假设分数段非常非常多,我们知道最坏情况要把每个if都走一遍,在大数据中这非常慢。

然而事实上成绩的分布并不是均匀的,有些分数段人多,有些分数段人少,我们可以通过改变if的先后顺序来起到优化的目的。

举个例子,下面的图片盗自这里


第一种构造方式:
这里写图片描述

第二种构造方式:
这里写图片描述


所以如果我们预先抽取一些数据知道了各个分数段的频数,把频数看作权值,建一棵哈夫曼树,按照哈夫曼树的顺序去判断,就可以大大优化时间。

构造:

首先需要明白的是,权值越大的深度肯定要越低,这个贪心显然。

动态规划做法:

先对元素从大到小排序。
fi,j 表示现在已经做了前i个元素,还空出来j个叶子节点的最小代价。
第一种转移显然,就是把第i+1个元素放到一个叶子节点上,

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值