1

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

[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 字符作为压缩数据,对吗?必须避免这种情况。

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

PS 文本主要包含numbers, '|字符。其他字符很少出现。

4

2 回答 2

7

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

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

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

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

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

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

于 2012-07-11T23:37:45.897 回答
4

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

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

于 2012-07-11T23:36:37.880 回答