浅谈Huffman树
所谓Huffman树,就是叶子结点带权的\(K\)叉树,假设每个叶子的权值为\(v\),到根的距离为\(dep\),那么最小化\(\sum v_i*dep_i\)就是\(Huffman\)树的拿手好戏。
为了最小化这个值,显然我们应该尽量让权值大的叶子深度浅,合并果子就是一个典型\(2\)叉\(Huffman\)树问题。
那么对于\(k\)叉\(Huffman\)树呢?
我们以\(3\)叉\(Huffman\)树为例,有这么\(6\)个数:\(1,2,3,5,8,9\)
按照合并果子这题的思路,我们应该先花\(6\)体力合并\(1,2,3\),新序列为:\(6,5,8,9\)
然后花\(19\)体力合并\(5,6,8\),新序列为:\(19,9\)
最后花\(28\)体力合并\(19,9\),新序列是\(28\),一共用的体力为\(53\)
但是我们换一种方式合并:
\(1,2,3,5,8,9\)
\(3,3,5,8,9\)
\(11,8,9\)
\(28\)
一共用了\(42\)体力。
那么问题就出现了,显然对于\(2\)叉\(Huffman\)树的贪心策略不再适用于\(k\)叉\(Huffman\)树。
但是,是真的不适用么?
仔细考虑上面两个例子,在用了\(53\)体力的例子里,我们最后一步合并了\(19,9\),但其实我们还可以假设有一个权值为\(0\)的点在这一步被合并了。
但在用了\(42\)体力的例子里,我们第一步就把权值\(0\)给安排了。
所以对于\(2\)叉\(Huffman\)树的贪心策略还是有用的,不过我们忽视了权值为\(0\)的结点。因为\(2\)叉\(Huffman\)树怎么建都不会存在某一步被合并的结点少于\(2\),但是\(k\)叉\(Huffman\)树不一样,它必须满足\((n-1)mod(k-1)=0\)才会每一步合并的结点都不少于\(k\)。因为每次合并都会减少\(k-1\)个结点,一共会减少\(n-1\)个结点。如果不满足上述等式,我们只需要不断添加权值为\(0\)的结点直到它满足为止即可。
关于\(k\)叉\(Huffman\)树的建立,也可以按照合并果子一样用堆辅助即可。
浅谈Huffman树的更多相关文章
- 浅谈B+树索引的分裂优化(转)
http://www.tamabc.com/article/85038.html 从MySQL Bug#67718浅谈B+树索引的分裂优化 原文链接:http://hedengcheng.com/ ...
- 浅谈oracle树状结构层级查询之start with ....connect by prior、level及order by
浅谈oracle树状结构层级查询 oracle树状结构查询即层次递归查询,是sql语句经常用到的,在实际开发中组织结构实现及其层次化实现功能也是经常遇到的,虽然我是一个java程序开发者,我一直觉得只 ...
- 浅谈oracle树状结构层级查询测试数据
浅谈oracle树状结构层级查询 oracle树状结构查询即层次递归查询,是sql语句经常用到的,在实际开发中组织结构实现及其层次化实现功能也是经常遇到的,虽然我是一个java程序开发者,我一直觉得只 ...
- (转)浅谈trie树
浅谈Trie树(字典树) Trie树(字典树) 一.引入 字典是干啥的?查找字的. 字典树自然也是起查找作用的.查找的是啥?单词. 看以下几个题: 1.给出n个单词和m个询问,每次询问 ...
- 【转】Senior Data Structure · 浅谈线段树(Segment Tree)
本文章转自洛谷 原作者: _皎月半洒花 一.简介线段树 ps: _此处以询问区间和为例.实际上线段树可以处理很多符合结合律的操作.(比如说加法,a[1]+a[2]+a[3]+a[4]=(a[1]+a[ ...
- 浅谈B树
B树即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right): 2.所有结点存储一个关键字: 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树: 如: ...
- 浅谈 trie树 及其实现
定义:又称字典树,单词查找树或者前缀树,是一种用于快速检索的多叉树结构, 如英文字母的字典树是一个26叉树,数字的字典树是一个10叉树. 核心思想:是空间换时间.利用字符串的公共前缀来降低查询时间的开 ...
- 浅谈Trie树(字典树)
Trie树(字典树) 一.引入 字典是干啥的?查找字的. 字典树自然也是起查找作用的.查找的是啥?单词. 看以下几个题: 1.给出n个单词和m个询问,每次询问一个单词,回答这个单词是否在单 ...
- [转] 浅谈Trie树(字典树)
原文地址:https://www.cnblogs.com/TheRoadToTheGold/p/6290732.html Trie树(字典树) 一.引入 字典是干啥的?查找字的. 字典树自然也是起查找 ...
随机推荐
- 【BZOJ3747】[POI2015]Kinoman 线段树
[BZOJ3747][POI2015]Kinoman Description 共有m部电影,编号为1~m,第i部电影的好看值为w[i]. 在n天之中(从1~n编号)每天会放映一部电影,第i天放映的是第 ...
- This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its 错误解决办法
This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary log ...
- Residual (numerical analysis)
In many cases, the smallness of the residual means that the approximation is close to the solution, ...
- 了解CentOS服务器的基本信息
简单描述了如何从CPU.内存.硬盘性能.负载方面去了解自己工作的服务器性能.这个很重要,必须了解机器的方方面面才能提高在自己运维工作效率. 一.查看linux服务器cpu详情 查看物理cpu个数: [ ...
- ARDUINO W5100 WebClient 测试
基础工作:W5100扩展板插在ARDUINO上.用网线把W5100和自己家的路由器连接.插上网线能看到侧面网口指示灯变亮.路由器开启DHCP服务(一般都是开启的). 1.打开官方例程里面的Ethern ...
- JSON JsonArray和JsonObject学习资料
资料地址: http://www.json.org/json-zh.html
- java搭建 SpringMVC+Mybatis(SMM)+mybatis-generate
搭建SSM系统,首先要了解整个过程: 1.创建spring-mvc项目 2.在maven中添加要引用的jar包(使用框架都是较新的版本:) 3. jdbc.xml +spring-mybatis.xm ...
- spring mvc实现Restful返回xml格式数据
最近,想在自己的小项目中搭建一个Restful风格的服务接口api,项目用的spring mvc 3,听说spring mvc本身就能十分方便的支持restful的实现,于是查询了下资料,果然非常强大 ...
- 51nod 1525 && CF566D
题意:给定n个元素,现在有2种合并操作和1种询问操作 1.单独合并两个元素所在的集合 2.合并一个区间内的元素所在的集合 询问:两个元素是否属于统一集合 神犇题解 感觉又涨了新姿势啊..我们最恼火的是 ...
- table+css与xhtmL+css实现同一登陆框(代码片段)
1.从网上下载了一个不错的登录框样式(table结合css布局): 2.初学xhtmL,自己改写了一下,希望有用 3. 我怎么不会上传截图呢? 1. [代码]xhtml_css组合 < ...