当订单保存无关紧要时,uint64s序列的最佳压缩方法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当订单保存无关紧要时,uint64s序列的最佳压缩方法相关的知识,希望对你有一定的参考价值。
我正在存储10,000 uint64s的数组。这些值是哈希值,因此非常均匀地分布在整个64位空间中,这使得它们不适合压缩(zip只能节省大约3%的成本)。
但是,值的顺序并不重要。我可以使用这些额外的知识来制作更有效的压缩程序吗?一个直接的想法是按顺序对它们进行排序,然后对它们进行bucketize,例如“下一个x值都有前缀a1b2c3”或其他东西。这肯定可以改善拉链,但我可以做得更好吗?谢谢
答案
您可以获得的理论上最好的好处是log2(10000!)位,这是初始80K字节中的大约15K字节。减少不到20%。
如果你真的想尝试挤出大部分内容,可以尝试按排序顺序压缩连续哈希之间的差异。第一个哈希将按原样发送,然后是9,999个差异。我将每个64位差异的高12位分离成不同的块,并用标准的无损压缩器压缩它。每个散列差异的低52位将基本上是噪声,因此在不尝试压缩它的情况下发送它。
您可以使用数字12来查看最适合压缩的内容。也许11或13会更好。
以上是关于当订单保存无关紧要时,uint64s序列的最佳压缩方法的主要内容,如果未能解决你的问题,请参考以下文章
使用 Laravel 4+ 从 jQuery/ajax 保存序列化的可排序数据