哈夫曼树(Huffman树)原理分析及实现 哈夫曼树(Huffman树)原理分析及实现 1 构造原理 假设有n个权值,则构造出的哈夫曼树有n个叶子结点。 n个权值分别设为 w1、w2、…、wn,则哈夫曼树的构造规则为: (1) 将w1、w2、…,wn看成是有n 棵树的森林(每棵树仅有一个结点); (2) 在森林中选出两个根结点的权值最小的树合并,作为一棵新树的左、右子树,且新树的根结点权值为其左、右子树根结点权值之和; (3)从森林中删除选取的两棵树,并将新树加入森林; (4)重复(2)、(3)步,直到森林中只剩一棵树为止,该树即为所求得的哈夫曼树。 例如:A:60, B:45, C:13 D:69 E:14 F:5 G:3 第一步:找出字符中最小的两个,小的在左边,大的在右边,组成二叉树。 F和G最小,因此如图,从字符串频率计数中删除F与G,并返回G与F的和 8给频率表
重复第一步:
编码规则:添加 0 和 1,规则左0 右1
2 代码实现 根据哈夫曼树的构造原理,为方便实现,我们使用数组来存储每个结点,其命名为Tree; 2.1 节点结构 节点具有以下结构: 2.2 类的实现 Huffman.h Hufman.cpp 3 测试代码及输出 正确输出:
4 参考资料 1.哈夫曼树算法及C++实现 2.百度百科·哈夫曼树 3.数据结构:Huffman树(哈夫曼树)原理及C++实现
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/84746.html