哪种算法最适合大文本压缩?

时间:2018-05-07 16:34:02

标签: compression data-compression

目前,我正在寻找一种适用于大量文本的无损压缩算法,它将通过AES进一步加密并用作隐写术中的有效载荷。

编辑:

基于A Comparative Study Of Text Compression Algorithms,似乎如此 算术编码在统计压缩技术中是优选的,而LZB推荐用于字典压缩技术。

所以现在我想知道统计压缩或字典压缩在压缩比和易于实现方面是否更适合大型英文文本压缩。

我已经搜索过,但仍然不知道合适的算法。非常感谢你的回答时间。祝你今天愉快。 :)

2 个答案:

答案 0 :(得分:1)

您在此问题中描述的许多算法称为熵编码器(Shannon-Fano,Huffman,算术等)。熵编码器用于压缩符号序列(通常是字节),其中一些符号比其他符号更频繁。用于压缩自然语言的符号(字母)的简单熵编码将仅产生大约2:1的压缩。

相反,流行的现代无损压缩技术包括LZ77,LZW和BWT等方法。简而言之,LZ系列涉及建立一个循环短符号序列的字典(我们称之为“单词”),然后使用指针来引用这些单词。像LZ77和LZW这样的LZ的一些实现可以非常简单地编码,但可能不会产生最高的压缩比。例如,请参阅此视频:https://www.youtube.com/watch?v=j2HSd3HCpDs。在光谱的另一端,LZMA2是一种相对更复杂的变体,具有更高的压缩比。

Burrows-Wheeler变换(BWT)提供了字典方法的巧妙替代方案。我将向您推荐维基百科的文章https://en.wikipedia.org/wiki/Burrows%E2%80%93Wheeler_transform

简而言之,它产生原始字节序列的(可逆)置换,通常可以通过行程编码后跟熵编码器非常有效地压缩。

如果我必须从头开始编写压缩技术,为简单起见,我可能会使用LZW或LZ77。

答案 1 :(得分:1)

Shannon-Fano编码,霍夫曼编码,算术编码,范围编码和非对称数字系统编码都是之后应用你首先建模数据,利用固有的优势冗余。

对于文本,冗余是重复的字符串和数据中的高阶相关性。有几种方法可以模拟文本。最常见的是Lempel-Ziv 77,它寻找匹配的字符串,Burrows-Wheeler变换(查找描述),以及通过部分匹配进行预测。

查看Large Text Compression Benchmark以查看压缩,压缩速度,使用的内存和解压缩速度的比较。