Gzip源代码分析(四)

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

哈弗曼编码

首先说明一下涉及到的数据结构:

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;

ushunsigned short int类型)这是一个结构体里面套了两个联合体的数据结构。Gzip用这个ct_data类型定义了五棵树,其实就是数组:dyn_ltree[],dyn_dtree[],static_ltree[],static_dtree[],bl_tree[]。数组的下标表示待编码节点的值,freq字段表示该节点出现的频率,其余字段暂不介绍。

哈弗曼编码的输入

gzip

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值