为什么压缩后不同的文本文件会变成不同的大小?

时间:2010-05-25 16:26:41

标签: php compression text-compression

我有一些随机文字大小= 27 gb的文件,压缩后它变成40 MB左右。

压缩后,3.5 GB的sql文件变为45 Mb。

但是一个109 MB的文本文件在压缩后会变成72 MB,所以这可能是错误的。

为什么压缩程度如此之低,它必须大约10 mb,否则我会遗漏一些东西。

我能看到的所有文件只有英文文本和一些语法符号(/,。 - = + etc)

为什么?

如果没有,你能告诉我如何超级压缩文本文件吗?

我可以用PHP编写代码,np就可以了。

5 个答案:

答案 0 :(得分:5)

文件的压缩率取决于其内容。

大多数压缩算法的工作原理是将重复数据转换为单个重复,指定重复的次数。

例如,包含字母a 1,000,000次的文件可以压缩得远远超过具有完全随机内容的文件。

如需了解更多信息,请提供更多信息。

答案 1 :(得分:2)

以这种方式思考......如果你有一个包含以下内容的文件:

abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc

该文件基本上只存储abc times 18

另一方面,这个文件:

abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz

只能存储:

abcdefghijklmnopqrstuvwxyz times 2

因此,第二个文件压缩为比第一个文件更大的文件,即使它开始时更短。

答案 2 :(得分:1)

压缩的工作原理是删除输入数据中的重复项。压缩后你的3.5GB文件变得少得多,因为它有很多重复的数据,而你的小文件压缩不多,因为它没有包含那么多的重复数据。

如果你想了解压缩的工作方式是大多数压缩工具,那么请看维基百科的Lempel-Ziv-Welch文章,这是构建大多数算法的算法。

对于这样的项目来说,PHP可能是错误的选择,因为与C语言中完全优秀的现有库相比,这种语言的速度会非常慢。

答案 3 :(得分:1)

通常,压缩级别取决于算法在文件中可以找到多少相似性和模式。如果所有文件都包含英文文本,则数字很奇怪。我强烈怀疑具有极高压缩比的文件包含大块重复的文本段。

答案 4 :(得分:0)

通过删除数据中的冗余来进行压缩。最开始的地方可能是Huffman Coding,这是直接针对这个问题的第一批开创性作品之一,但你可能会在Information Theory上进一步深入研究香农的原创作品。

这些并非新概念 - 当人们有兴趣在非常有限的频道上有效传输数据时,他们首先在20世纪40年代和50年代获得了极大的兴趣。这个主题不仅仅是计算的兴趣 - 与熵和其他基础物理学有一些非常深刻的联系。例如,事实证明,完全压缩的数据与白噪声无法区分。