有效地应用运行长度变换后移动到前变换和BWT



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

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

我不明白为什么他们会在移动到前变换后使用运行长度变换,这对我来说似乎并不有效。据我了解,MTF本身不会产生很多运行,因此使用RLT后记是没有用的。

请解释一下。

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

查看https://github.com/flanglet/kanzi-cpp获取实现示例。您可以使用Block编解码器运行BlockCompressor,无论是否使用MTF+ZLE。

效率不高。

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

现在,这个把戏完全过时了。在BWT之前,您可能会发现某种LZP预处理,特别是对于长距离匹配(超出块大小),在速度改进方面与RLE的意图大致相同,但功能更强大。MTF也被完全取代了,因为它太占用CPU了,而且效率不高。

最新更新