字典压缩方法详解
1. 字典方法概述
在数据压缩领域,字典方法是一类重要的技术。不过,在搜索长匹配时,字典方法的速度往往较慢。搜索缓冲区的大小 S 也存在限制,虽然较大的搜索缓冲区能带来更好的压缩效果,但会减慢编码器的速度,因为搜索过程会花费更多时间,即便使用二叉搜索树也是如此。而且,增大两个缓冲区的大小意味着会生成更长的令牌,这反而会降低压缩效率。
例如,使用 2 字节令牌时,将一个 2 字符的字符串压缩成一个令牌,会得到 2 字节加上 1 个标志位;而将这两个字符以原始 ASCII 码形式写入,则是 2 字节加上 2 个标志位,二者在大小上差异很小。在这种情况下,编码器应选择后者,以未压缩的形式写入这两个字符,这样既能节省时间,又仅浪费 1 位。这就是所谓的编码器的 2 字节盈亏平衡点。当令牌变长时,盈亏平衡点会增加到 3 字节。
2. 重复时间编码方法
2.1 方法原理
该方法由 Frans Willems 开发,输入可以是任何符号,这里以二进制输入为例进行说明。输入符号会被分组成长度为 L 的单词,这些单词被放置在一个滑动缓冲区中。该缓冲区分为前瞻缓冲区和搜索缓冲区,前瞻缓冲区包含待压缩的单词,搜索缓冲区则包含最近处理的 B 个单词。
编码器会尝试将前瞻缓冲区最左边的单词与搜索缓冲区的内容进行匹配,每次只匹配前瞻缓冲区中的一个单词。若找到匹配项,该单词与匹配起始位置的距离(偏移量)用 m 表示,并通过一个 2 部分的前缀码进行编码,然后写入压缩流。由于每次只匹配一个单词,所以无需对匹配的符号数量进行编码。若未找到匹配项,则写入一个特殊代码,随后跟上未匹配单词的 L 个原始符号。
超级会员免费看
订阅专栏 解锁全文
4980

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



