在文本文件中重新排序线以获得更好的压缩比



我有很多巨大的文本文件,需要以最高比例压缩。只要减压速度相当快,压缩速度可能会很慢。

这些文件中的每行都包含一个数据集,并且可以以任何顺序存储。

与这个类似的问题:对文件进行排序以优化压缩效率

对我来说,压缩速度不是问题。是否有现成的工具将类似行分组在一起?还是我可以实现的算法?

仅分类提供了一些改进,但我怀疑更多是可能的。

每个文件长约6亿行,每个文件总数约为40个字节,总计24GB。用xz

压缩至〜10GB

这是一种相当幼稚的算法:

  • 随机选择一条初始行,然后写入压缩流。
  • 剩下的行> 0:
    • 保存压缩流的状态
    • 对于文本文件中的每个剩余行:
      • 将线路写入压缩流并记录所得的压缩长度
      • 回到压缩流的保存状态
    • 编写导致压缩流的最低压缩长度的线路
    • 免费保存状态

这是一种贪婪的算法,不会是全球最佳的,但是在一个接一个地遵循时,它应该非常擅长将线条匹配在一起。是O(N 2 (,但您说压缩速度不是问题。主要优点是它的经验:它不依赖于哪个线顺序会很好地压缩但实际测量它的假设。

如果您使用Zlib,它提供了一个功能放置,以重复压缩流的状态,尽管它显然很贵。

编辑:如果您将此问题作为序列输出所有行,同时试图最大程度地减少序列中所有线条之间的总编辑距离,那么此问题将减少到旅行推销员问题,而编辑距离为您"距离",所有线条都是您必须访问的节点。因此,您可以研究该问题的各种方法,并将其应用于此。即使那样,就编辑距离而言,最佳的TSP解决方案不一定是压缩最小/

的文件

最新更新