Products
GG网络技术分享 2025-11-15 18:09 3
嘿,细小伙伴们,你们晓得啥是霍夫曼树吗?别急,让我来给你们磨蹭磨蹭说明白,就像我讲故事一样。
霍夫曼树啊, 它就像是一棵神奇的树,Neng帮我们把信息压缩得超级细小,就像把一巨大堆东西装进一个细小盒子里而且这玩意儿盒子打开后全部的东西douNeng完优良无损地拿出来。

霍夫曼树啊,它不是用来种苹果的,而是用来帮我们geng优良地处理信息的。它Neng用来压缩数据,加密信息,还有储存数据,就像是给信息穿上了隐形衣,护着它们不被别人kan到。
比如说 我们写一篇文章,用霍夫曼树Neng把文章里的个个字变成一个hen细小的二进制代码,这样就Neng把整篇文章压缩得细小细小的,方便存储和传输。
下面是一段kan起来hen麻烦的代码,但是别怕,我会磨蹭磨蹭说明白给它。
struct TreeNode {
int weight;
int parent, left_child, right_child;
};
vector HuffmanTree {
// 初始化节点
vector nodes * );
for ; ++i) {
nodes.weight = weights;
}
// 构建霍夫曼树
for ; i
三、 编码过程
霍夫曼树的编码过程啊,就像是给个个叶子节点穿上了一条路径,这条路径上的个个方向dou会对应一个二进制代码。
比如说从根节点到叶子节点的路径是“左左右”,那么这玩意儿字符的编码就是“0110”。这样,我们就把个个字符dou转换成了二进制代码。
下面也是一段kan起来hen麻烦的代码,我来给你们说明白一下。
unordered_map HuffmanCode {
unordered_map codes;
for / ; ++i) {
int j = i;
string code;
while {
if {
code.insert;
} else {
code.insert;
}
j = nodes.parent;
}
codes = code;
}
return codes;
}
四、 实例琢磨
优良啦,眼下我们来举个例子,kankan霍夫曼树是怎么干活的。
虚假设我们有这样一组字符和它们的频率:A: 5, B: 9, C: 12, D: 13, E: 16, F: 45, G: 50, H: 60。
我们把这些个字符按照频率从细小到巨大排序, 然后选择权值Zui细小的两个节点,合并成一个新鲜节点,这玩意儿过程一直再来一次直到全部的节点dou连接成了一棵树。
霍夫曼树,也叫ZuoZui优二叉树,它是一种带权路径长远度Zui短暂的树。通过霍夫曼树, 我们Neng把一组权值集合变成一组二进制编码,这样就Neng实现数据压缩,特别适合于高大频字符的编码。
Demand feedback