哈夫曼树 荷马史诗-洛谷

这道题目做了五个多小时,主要还是不了解哈夫曼树的一些细节问题,自己做个总结吧。

题目链接:https://www.luogu.org/problemnew/show/P2168

总结:

一:这道题目的一些收获

1:求最终编码文本的长度,不一定必须让字符组成的编码的长度信息必须存储在叶子结点。可以在建立的时候,定义一个ans=0,在从下向上建立哈夫曼树的时候,不断的相加。比如,有个高度为h的结点,他的结点带权路径长度(不懂定义看二的概念),可以是h个w(权重)相加。这在建树的过程中可以实现。本题目就是采用的这种方式

2:结点的选择:选择权值最小,并且高度较小的。(权值较小的可以理解,那么高度较小呢?题目中说了,求的是最长字符串 si 的最短长度,有两个权值相同的结点,将h更大的结点,留到后面,会让最长字符串的最短长度更小)当时自己就是错在这里,火来参考了大神的代码

3:***添加空结点

当时多进制的时候。因为每次都是将k个节点合并为1个(减少k-1个),一共要将n个节点合并为1个,如果(n-1)%(k-1)!=0 则最后一次合并时不足k个。也就表明了最靠近根节点的位置反而没有被排满,因此我们需要加入k-1-(n-1)%(k-1)个空节点使每次合并都够k个节点(也就是利用空节点将其余的节

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值