数据压缩字典方法与Deflate算法详解
1. 字典方法基础
1.1 索引表与上下文确认
在数据压缩的字典方法中,H 是一个 16 位索引,用于大小为 (2^{16} = 64K) 的索引表。该索引表除了包含指针 P 外,还包含上下文 C。当一个上下文 C 被哈希到索引 H 时,编码器期望在索引表的位置 H 找到相同的上下文 C,这被称为上下文确认。若编码器找到的不是预期内容或为空指针,它会将 P 设为 null 并对 3 阶上下文进行哈希。若 3 阶上下文确认也失败,算法会对 2 阶上下文进行哈希;若仍失败,算法将 P 设为 null 并在压缩流中写入一个字面量。这种方法旨在找到目前为止最高阶的上下文。
1.2 LZP4 的多步查找过程
LZP4 使用 5 阶上下文和多步查找过程。在第一步中,上下文最右边的 4 个字节 I 按照 (H = ((I >> 15) ^ I) \& 0xFFFF) 进行哈希,创建一个 16 位索引 H。然后,H 作为索引指向有 64K 条目的索引表,每个条目对应一个 H 值,且指向一个链表的起始位置,该链表连接着具有相同哈希值的节点。例如,若上下文 abcde、xbcde 和 mnopq 哈希到相同的索引 H = 13,当查找上下文 xbcde 时,索引表的位置 13 会指向一个包含这些上下文节点的链表。遍历该链表,直到找到包含 bcde 的节点,此节点又指向另一个链表,该链表连接着在 bcde 之前的 a、x 等符号。继续遍历第二个链表,直到找到包含 x 的节点,该节点包含指向搜索缓冲区中上下文 xbcde 最近出现位置的指针。若未找到包含 x 的节点,则在压缩流中写入一个字面量。这种复杂的查找过程是
超级会员免费看
订阅专栏 解锁全文
43

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



