文本文件中的数据顺序是否会影响其压缩率?

Ica*_*rus 4 compression algorithm zip

我有2个大文本文件(确切地说是csv).两者都具有完全相同的内容,除了一个文件中的行按一个顺序而另一个文件中的行具有不同的顺序.

当我压缩这两个文件(以编程方式,使用DotNetZip)时,我注意到其中一个文件总是相当大 - 例如,一个文件比另一个文件大~7 MB .-

我的问题是:

文本文件中的数据顺序如何影响压缩以及可以采取哪些措施来保证最佳压缩比? - 我假设将相似的行组合在一起(至少在ZIP文件的情况下,这是我正在使用的)将有助于压缩,但我不熟悉不同压缩算法的内部,我很欣赏快速解释关于这个问题.

哪种算法能更好地处理这种情况,无论数据的顺序如何,都能实现最佳的平均压缩?

Mar*_*ler 11

"如何"已经得到了解答.要回答你的"哪个"问题:

匹配窗口越大,算法对订单的敏感度就越低.但是,所有压缩算法在某种程度上都是敏感的.

gzip有一个32K窗口,bzip2是一个900K窗口,xz是一个8MB窗口.xz可以达到64MB的窗口.所以xz对订单最不敏感.更远的匹配将需要更多的代码进行编码,因此无论窗口大小如何,您都将使用例如排序记录获得更好的压缩.短窗只会阻止远距离比赛.

  • +1:这是很好的信息。你的名字似乎“可疑”似曾相识。你是zlib阿德勒吗? (2认同)
  • 很酷。感谢您在该库上所做的工作。它非常好。 (2认同)

Mar*_*ins 7

在某种意义上,它是文件的度量,定义了它的压缩程度.所以,是的,订单绝对重要.举个简单的例子,考虑一个填充了abcdefgh...zabcd...z重复重复值的文件.它可以很好地压缩大多数算法,因为它是非常有序的.但是,如果您完全随机化顺序(但保留每个字母的相同计数),则它具有完全相同的数据(尽管具有不同的"含义").它是不同顺序的相同数据,也不会压缩.

事实上,因为我很好奇,我只是尝试过.我填充了一个a-z重复100,000个字符的数组,将其写入文件,然后"随机"将该数组洗牌并再次写入.第一个文件压缩到394字节(小于原始大小的1%).第二个文件压缩为63,582字节(超过原始大小的63%).