Hash 当顺序保持不'时,uint64s序列的最佳压缩方法;没关系

Hash 当顺序保持不'时,uint64s序列的最佳压缩方法;没关系,hash,compression,Hash,Compression,我正在存储10000个UINT64阵列。这些值是散列,因此在整个64位空间中分布相当均匀,这使得它们不适合压缩(zip只能节省大约3%的空间) 但是,值的顺序并不重要。我可以利用这额外的知识来制定一个更有效的压缩程序吗?一个直接的想法是按顺序对它们进行排序,然后对它们进行bucketize,例如“下一个x值都有前缀a1b2c3”之类的。这当然可以改善拉链,但我可以做得更好吗?谢谢你,理论上你能得到的最好的好处是log2(10000!)位,这是你最初的80K字节中的15K字节。降价不到20% 如果

我正在存储10000个UINT64阵列。这些值是散列,因此在整个64位空间中分布相当均匀,这使得它们不适合压缩(zip只能节省大约3%的空间)


但是,值的顺序并不重要。我可以利用这额外的知识来制定一个更有效的压缩程序吗?一个直接的想法是按顺序对它们进行排序,然后对它们进行bucketize,例如“下一个x值都有前缀a1b2c3”之类的。这当然可以改善拉链,但我可以做得更好吗?谢谢你,理论上你能得到的最好的好处是log2(10000!)位,这是你最初的80K字节中的15K字节。降价不到20%

如果您真的想压缩其中的大部分内容,可以尝试按排序顺序压缩连续散列之间的差异。第一个散列将按原样发送,然后是9999个差异。我会将每个64位差异的高12位分离成不同的块,并用标准无损压缩程序压缩。每个散列差的低52位基本上是噪声,因此不需要压缩它就可以按原样发送


你可以玩数字12,看看什么给你最好的压缩。也许11或13会更好。

理论上你能得到的最大好处是log2(10000!)位,这是最初80K字节中的15K字节。降价不到20%

如果您真的想压缩其中的大部分内容,可以尝试按排序顺序压缩连续散列之间的差异。第一个散列将按原样发送,然后是9999个差异。我会将每个64位差异的高12位分离成不同的块,并用标准无损压缩程序压缩。每个散列差的低52位基本上是噪声,因此不需要压缩它就可以按原样发送


你可以玩数字12,看看什么给你最好的压缩。也许11号或13号会更好。

尝试一下,只是为了好玩。结果证明我对12的第一个猜测是正确的。这使得压缩比为0.8260。令人惊讶地接近理论上的最佳压缩0.8149。尝试一下,只是为了好玩。结果证明我对12的第一个猜测是正确的。这使得压缩比为0.8260。令人惊讶地接近理论上的最佳压缩0.8149。