数据结构:Huffman树(哈夫曼树)原理及C++实现

本文介绍了Huffman树的基本原理及其在数据压缩中的应用,并提供了C++实现的相关内容,旨在帮助读者深入理解这一重要的数据结构。
摘要由CSDN通过智能技术生成

前言:

        最近要到期末了,事情有点多有几个星期没有写这个了,我们数据结构实验课要求写Huffman树,因此这次我将对Huffman树进行介绍。

原理:

哈夫曼树是一种单词树,广泛使用于数据压缩之中。将会根据每个字符的权重,来构建一颗Huffman树,同时根据Huffman树对原来的文本进行二次编码,以达到压缩数据的目的。

比如当我们对AAABBBA进行Huffman树压缩时,A的编码将会是1,B的编码将会是0,那么这串字符串将会被压缩为1110001,只需要7个bit即可进行储存,而AAABBBA则至少需要7 * 8个bit,这样我们就可以达到数据 压缩(compress)的目的。当然,当我们预见一个已经压缩好的数据时,我们只需要拥有其对应的编码表,则可将其进行 展开(expend)
这里先给出一个我写的Huffman树的声明:
/* Huffman类:哈夫曼树
 * 接口:
 * MakeEmpty:重置功能,重置哈夫曼树
 * DisSt:展示编码表
 * IsLeaf:判断对应节点是否为叶子节点
 * GetFreq:获取权重数组
 * BuildTree:根据权重数组构建哈夫曼树
 * BuildCode:根据哈夫曼树构建编码表
 * Expend:根据哈夫曼树展开压缩文本
 * Compress:根据编码表压缩原始文本
 */
class Huffman
{
public:
	// 构造函数
	Huffman();
	// 析构函数
	~Huffman();

	// 接口函数
	void MakeEmpty();
	void DisSt();

	bool IsLeaf(Node*);
	void GetFreq(int);
	void BuildTree();
	void BuildCode();

	string Expend(string);
	string Compress(string);

private:
	// 辅助功能函数
	void MakeEmpty(Node *);
	void BuildCode(Node *, string);

	// 数据成员
	const int R = 128;
	int *freq; // 权重数组
	string *st; // 编码表
	Node *Root; // 哈夫曼树根
};

Huffman树节点:
Huffman树的节点中将会储存
  • 19
    点赞
  • 91
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值