0

我是编码新手,所以我试图了解基础知识。我遇到了一个描述无损文本压缩技术的文档,在这个文档中,有一张图说明了他们的压缩是如何工作的。它是这样工作的:

Source -> BWT -> MTF -> RLT -> Proprietary Entropy Encoder

我不明白为什么他们会在 Move to Front Transform 之后使用 Run-Length Transform,这对我来说似乎效率不高。据我了解,MTF 本身不会产生很多运行,因此使用 RLT 后记没有用。

一些解释将不胜感激!

4

2 回答 2

2

BWT 之后的 MTF 的目标是缩小符号范围,这有利于熵编码。MTF 用它们的等级替换符号,由于 BWT 生成的重复,它们通常很小。此后可能会应用零长度编码,因为 MTF 可能会产生大量 0(这只是 RLE 的一种特殊情况,其中只有 0 的运行按长度编码)。

查看https://github.com/flanglet/kanzi-cpp以获取实现示例。您可以使用带或不带 MTF+ZLE 的 Block 编解码器运行 BlockCompressor。

于 2013-03-14T23:12:06.850 回答
0

它效率不高。

这可能是关于 BWT 的旧论文。当时,使用 RLE(运行长度编码器)是提高速度的常用技巧。RLE,顺便说一句,不仅在 BWT 之后使用,而且在之前使用,以加快 BWT 阶段。相同的逻辑可以应用于熵编码器,但不太可能提供同样多的好处。

如今,这个技巧已经完全过时了。在 BWT 之前,您可能会发现某种 LZP 预处理,特别是对于长距离匹配(超出块大小),在提高速度方面与 RLE 的意图大致相同,但更强大。MTF 也被完全取代,因为它过于 CPU 密集,而且其成本效率不高。

于 2012-12-25T19:27:51.060 回答