文本压缩 - 使用什么算法

时间:2012-07-11 23:29:47

标签: algorithm text compression

我需要压缩表单

的一些文本数据
[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'|字符。其他角色非常罕见。

2 个答案:

答案 0 :(得分:7)

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

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

关于压缩算法本身,坚持使用gzip或bzip2这样的较为知名的算法,因为两个经过充分测试的开源代码都存在。

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

  1. 我需要在编码或解码方面获得最佳速度(例如,bzip非常不对称)
  2. 编码器和解码器的内存效率有多重要?对于嵌入式应用程序可能很重要
  3. 是重要代码的大小,也适用于嵌入式
  4. 我是否希望预先存在经过良好测试的编码器或解码器代码,或者仅在C语言或其他语言中使用这些代码
  5. 这里的底线可能是,采用有代表性的数据样本,并使用一些现有算法运行一些测试,并根据对您的用例重要的标准对它们进行基准测试。

答案 1 :(得分:4)

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

如果你真的考虑过它,你可能会找到一个更好的算法来解决你的具体问题,因为你只使用了几个不同的字符,但如果你偶然发现一个字符,我认为值得一试。