我有很多巨大的文本文件,需要以尽可能高的比率进行压缩.只要减压速度相当快,压缩速度可能会很慢.
这些文件中的每一行都包含一个数据集,它们可以按任何顺序存储.
与此类似的问题:
Sorting a file to optimize for compression efficiency
但对我来说压缩速度不是问题.是否有现成的工具将类似的线组合在一起?或者也许只是我可以实现的算法?
单独排序有一些改进,但我怀疑还有更多可能.
每个文件大约有6亿行,每个大约40个字节,总共24GB.用xz压缩到~10GB
解决方法:
这是一个相当天真的算法:
>保存压缩流的状态
>对于文本文件中的每个剩余行:
>将该行写入压缩流并记录生成的压缩长度
>回滚到压缩流的已保存状态
>将导致压缩长度最短的行写入压缩流
>释放已保存的状态
这是一个贪婪的算法,并不是全局最优的,但它应该非常好地匹配在一个接一个地跟随时压缩良好的行.这是O(n2),但你说压缩速度不是问题.它的主要优点在于它是经验性的:它不依赖于关于哪个线序将压缩得很好但实际测量它的假设.
如果你使用zlib,它提供了一个复制压缩流状态的函数deflateCopy,虽然它显然非常昂贵.
编辑:如果您在尝试最小化序列中所有行对之间的总编辑距离时输出序列中的所有行来解决此问题,则此问题将减少为旅行商问题,编辑距离为“距离”并且所有行都是您必须访问的节点.因此,您可以查看the various approaches问题,并将其应用于此问题.即使这样,编辑距离方面的最佳TSP解决方案也不一定是压缩最小的文件/
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。