我有一些随机文本大小 = 27 gb 的文件,压缩后它变成 40 mb 左右。
一个 3.5 GB 的 sql 文件压缩后变成 45 Mb。
但是一个 109 mb 的文本文件在压缩后变成了 72 mb,所以它可能有什么问题。
为什么压缩得这么少,它必须 10 mb 左右,否则我错过了一些东西。
我可以看到的所有文件都是英文文本和一些语法符号(/ , . - = + 等)
为什么?
如果不是,你能告诉我如何超级压缩文本文件吗?
我可以在 PHP 中编码,np 在其中。
我有一些随机文本大小 = 27 gb 的文件,压缩后它变成 40 mb 左右。
一个 3.5 GB 的 sql 文件压缩后变成 45 Mb。
但是一个 109 mb 的文本文件在压缩后变成了 72 mb,所以它可能有什么问题。
为什么压缩得这么少,它必须 10 mb 左右,否则我错过了一些东西。
我可以看到的所有文件都是英文文本和一些语法符号(/ , . - = + 等)
为什么?
如果不是,你能告诉我如何超级压缩文本文件吗?
我可以在 PHP 中编码,np 在其中。
文件的压缩率取决于其内容。
大多数压缩算法通过将重复数据转换为单个重复来工作,指定重复的次数。
例如,包含a
1,000,000 次字母的文件可以被压缩得远远超过内容完全随机的文件。
如需更多信息,请提供更多信息。
这样想……如果您有一个包含以下内容的文件:
abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc
该文件基本上只是存储abc times 18
另一方面,这个文件:
abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz
只能存储:
abcdefghijklmnopqrstuvwxyz times 2
因此,第二个文件压缩为比第一个文件更大的文件,即使它开始时更短。
压缩通过删除输入数据中的重复项来工作。您的 3.5GB 文件在压缩后变得更小,因为它有很多重复数据,而较小的文件没有压缩那么多,因为它不包含那么多重复数据。
如果您想了解压缩的工作原理是大多数压缩实用程序,请查看 Wikipedia 的Lempel-Ziv-Welch文章,这是构建大多数这些算法的算法。
对于这样的项目,PHP 可能是错误的选择,因为与已经是 PHP 本身的一部分的 C 中完美的现有库相比,在该语言中它会非常慢。
通常,压缩级别取决于算法可以在文件中找到多少相似性和模式。如果所有文件都包含英文文本,则数字很奇怪。我强烈怀疑具有极高压缩率的文件包含大量重复的文本段。
Compression works by removing redundancy in data. The definitive place to start is probably with Huffman Coding which is one of the first seminal works directly on the problem, but you may care to dig further back to Shannon's original works on Information Theory.
These are not new concepts - they first gained significant interest back in the 1940's and 50s when people were interested in transmitting data efficiently over very limited channels. The subject is not just of interest to computing either - there's some very deep connections with entropy and other fundamental physics. For instance it turns out perfectly compressed data is indistinguishable from white noise.