【问题标题】:Text Compression - What algorithm to use文本压缩 - 使用什么算法
【发布时间】:2012-07-11 23:29:46
【问题描述】:

我需要压缩表单的一些文本数据

[70,165,531,0|70,166,562|"hi",167,578|70,171,593|71,179,593|73,188,609|"a",1,3|

数据包含几千个字符(大约 10000 - 50000 个)。

我阅读了各种压缩算法,但无法决定在这里使用哪一种。

这里重要的是:压缩字符串应该只包含字母数字字符(或一些特殊字符,如 +-/&%@$..)我的意思是大多数算法都提供乱码 ascii 字符压缩数据对吗?必须避免这种情况。

有人可以指导我如何在这里进行吗?

P.S 文本主要包含 numbers'| 字符。其他字符很少出现。

【问题讨论】:

  • “大多数算法都提供乱码 ascii 字符”——不,它们提供 字节。字节和字符是不同的东西。

标签: algorithm text compression


【解决方案1】:

实际上,您将输出字符集限制为可打印字符的要求会自动花费您 25% 的压缩增益,因为每 8 位您最终将使用大约 6 位。

但如果这是您真正想要的,您始终可以使用 base64 或更节省空间的 base85 输出将原始字节流重新转换为可打印字符。

关于压缩算法本身,坚持使用 gzip 或 bzip2 等比较知名的算法之一,因为这两种都存在经过良好测试的开源代码。

选择“最好”的算法实际上并不容易,这里是你必须问自己的问题列表的摘录:

  1. 我是否需要编码或解码方面的最佳速度(例如 bzip 非常不对称)
  2. 编码器和解码器的内存效率有多重要?对于嵌入式应用程序可能很重要
  3. 代码的大小很重要,也适用于嵌入式
  4. 我是否想要现有的经过良好测试的编码器或解码器代码,或者两者都只用 C 或其他语言
  5. 等等

这里的底线可能是,从您的数据中抽取一个有代表性的样本,并使用几种现有算法运行一些测试,然后根据对您的用例很重要的标准对它们进行基准测试。

【讨论】:

  • 非常感谢!我使用 Huffman 和 base64 对结果进行了编码。能够压缩到大约 50%。现在就可以了。也许我会尝试其他方法来实现更好的压缩!
  • @SatheeshJM 很好,尽管它很简单 Huffman 实际上对于某些用例来说是一个合理的选择,并且在给定的约束条件下 50% 的压缩是相当好的。
  • 好的。我使用了一些特定于问题的替换和转换,当与 ascii85 编码一起使用时,能够获得大约 35% 的压缩。这绰绰有余!只是为了好玩,我还在压缩之前应用了 Borrows Wheeler 变换。略有改善;压缩了 34%。无论如何,非常感谢您的帮助!美好的一天!
【解决方案2】:

一个想法:你可以独立解决你的两个问题。使用任何算法为您提供最佳压缩(只需在您的数据类型上尝试一些。bz2,zip,rar - 无论您喜欢什么,并检查大小),然后摆脱“乱码 ascii”(那是实际上只是那里的字节...),您可以使用 Base64 对压缩数据进行编码。

如果你真的花很多心思,你可能会为你的具体问题找到更好的算法,因为你只使用了几个不同的字符,但如果你偶然发现一个,我认为值得一试。

【讨论】:

  • 我其实想过提出一个针对特定问题的算法,但最终还是求助于 Huffman。还是谢谢!
猜你喜欢
  • 1970-01-01
  • 2015-09-25
  • 1970-01-01
  • 1970-01-01
  • 2019-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多