哈弗曼编码
首先说明一下涉及到的数据结构:
typedef struct ct_data {
union {
ush freq; /* frequency count */
ush code; /* bit string */
} fc;
union {
ush dad; /* father node in Huffman tree */
ush len; /* length of bit string */
} dl;
} ct_data;
(ush是unsigned short int类型)这是一个结构体里面套了两个联合体的数据结构。Gzip用这个ct_data类型定义了五棵树,其实就是数组:dyn_ltree[],dyn_dtree[],static_ltree[],static_dtree[],bl_tree[]。数组的下标表示待编码节点的值,freq字段表示该节点出现的频率,其余字段暂不介绍。
哈弗曼编码的输入
在gzip中

本文介绍了Gzip压缩中哈弗曼编码的原理,包括涉及的数据结构ct_data,以及如何通过映射减少dyn_dtree和dyn_ltree数组的大小。在gzip中,哈弗曼编码对LZ77输出进行进一步压缩,通过特定的映射策略将原始数据范围映射到更小的节点值,以节省存储空间。解压时,通过解码小数值并恢复截断的extra bits来还原原始信息。
最低0.47元/天 解锁文章
4348

被折叠的 条评论
为什么被折叠?



