哈夫曼树(基于优先队列最小堆)

该博客介绍如何使用哈夫曼编码压缩文本,并通过优先队列(最小堆)优化算法,详细阐述了从字符权值到哈夫曼编码总长度的计算过程,包括实验环境、关键代码分析及实例验证。
摘要由CSDN通过智能技术生成

实验三、哈夫曼编码

 

一、实验内容

输入一段文本,计算其中每一个字符的哈夫曼编码,输出编码后文本的长度。

哈夫曼编码作为一种变长编码方式,在文件/图像压缩领域有着重要的应用。

 

二、设计思路

给定n个树叶的权值,改造带权路径总长最短的最优二叉树的算法由哈夫曼给出。

a. 对个权值进行排序,满足

b. 计算作为中间节点的权,的左儿子是,右儿子是. 在权序列中删除, 加入. 若, 结束,否则转a.

       树的一个节点用一个结构体表示,结构体的指针域两个指针分别指向该节点的左儿子和右儿子。如此按哈夫曼算法可以构造哈夫曼树。

       考虑到本题并未要求给出每个字符的哈夫曼编码,而仅要求计算字符串的哈夫曼编码总长度,故可以略去建树过程,用n个树叶构成的数组模拟建树过程中节点的合并过程。

    另外注意到一个树叶节点在最终构建的哈夫曼树中的深度为h, 则该节点的权值在建树过程中(父节点的权值=左儿子节点的权值+右儿子节点的权值)就会被累加h次。因此在建树过程中每次两个子节点合并成父节点时将父节点的权值进行累加,建树完成后就能得到字符串的哈夫曼编码总长度。这样做可以省去建树完成后遍历整棵

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值