数据压缩算法:霍夫曼编码与 LZ77 解析
1. 霍夫曼编码概述
霍夫曼编码是一种广泛应用的数据压缩算法,其核心思想是通过构建霍夫曼树,为不同频率的符号分配不同长度的编码,频率高的符号使用较短的编码,频率低的符号使用较长的编码,从而实现数据的压缩。当所有频率被缩放以适应一个字节时,没有编码会超过 16 位。
1.1 构建霍夫曼编码表
构建霍夫曼编码表是通过对霍夫曼树进行前序遍历实现的。在 build_table 函数的每次调用中, code 用于跟踪当前生成的霍夫曼编码, size 记录编码的位数。遍历树时,向左移动时在编码后追加 0,向右移动时追加 1。遇到叶子节点时,将霍夫曼编码存储到编码表的相应条目中,并使用 htons 函数确保编码以大端字节序存储,这是后续生成压缩数据和解压缩数据所需的格式。
static void build_table(BiTreeNode *node, unsigned short code, unsigned char
size, HuffCode *table) {
if (!bitree_is_eob(node)) {
if (!bitree_is_eob(bitree_left(node))) {
build_table(bitree_left(node), code << 1, size + 1, table);
}
if (!bitree_is_eob(bitree_right(node))) {
霍夫曼编码与LZ77算法解析
超级会员免费看
订阅专栏 解锁全文
505

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



