【问题标题】:Which algorithm is most suitable for large text compression?哪种算法最适合大文本压缩?
【发布时间】:2018-10-17 12:40:33
【问题描述】:

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

编辑:

基于A Comparative Study Of Text Compression Algorithms,看来 算术编码优先用于统计压缩技术,而 LZB 推荐用于字典压缩技术。

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

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

【问题讨论】:

  • what is the current state of text-only compression algorithms?。您还应该在问题中明确说明您是在寻找建议的算法之间的比较,还是一般最适合的算法。在后一种情况下,您必须描述“最适合”的标准,例如压缩比、内存、速度、兼容性、易于实现等。
  • @Reti43 谢谢你的提醒。我在问题中添加了一些信息。

标签: compression data-compression


【解决方案1】:

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

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

Burrows-Wheeler 变换 (BWT) 为字典方法提供了一种巧妙的替代方法。我会让你参考维基百科的文章,https://en.wikipedia.org/wiki/Burrows%E2%80%93Wheeler_transform

不过,简而言之,它会产生原始字节序列的(可逆)排列,通常可以通过游程编码和熵编码器非常有效地压缩这些排列。

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

【讨论】:

  • 出色的答案,恰到好处地融合了简化和技术细节。
【解决方案2】:

Shannon-Fano 编码、Huffman 编码、算术编码、Range 编码和非对称数字系统编码都是零阶熵编码器,您首先对数据进行建模后应用,利用固有的冗余。

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

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

【讨论】:

    猜你喜欢
    • 2015-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-15
    • 2021-12-20
    • 1970-01-01
    相关资源
    最近更新 更多