【发布时间】:2018-05-23 00:30:27
【问题描述】:
我有具有以下约束的字节数组:
- 长度在 1 到 256 之间
- 长度中位数约为 128,但我必须在更大的数据集上验证这一点
- 值按升序排序
- 值是唯一的
我正在寻找最大可能压缩此数据的算法。 如果数组已满,则最大未压缩大小为 256B。中位数为 128B。
目前我知道的最佳压缩是使用位域来存储字节是否在数组中,并且我可以省略尾随零。
所以对于一个数组,我将使用ceiling("max value" / 8) B。
对于完整数组(或包含 248 个数组),这将是 32B。
这通常会减小大小,但对于具有 长度
我可以使用任何其他技巧/优化/压缩来进一步减小尺寸吗?
一个简短的数据示例以消除误解,请注意此数组比数据中的预期数组短:
{ 0, 1, 5, 7, 88, 105, 233, 234, 235, 255 }
【问题讨论】:
-
您需要了解,如果不延长一些“压缩”时间,任何压缩过程都无法工作。可以有 2^256 个不同的数组,您可以使用 256 位整数对其进行编号。如果您希望数字短于 256 位,那么您将不足以代表所有可能性。因此,如果某些编码较短,则某些编码必须更长。压缩是关于巧妙地选择哪些数组编码更短,以平均获得真正的压缩。所以你需要知道数组分布的一些性质,比如“偶数多于奇数”、“经常有很大的差距”……
标签: algorithm compression