小编典典

排序整数的压缩算法

algorithm

我有一个很大的随机整数序列,从最低到最高排序。数字从1位开始,在45位附近结束。在列表的开头,我有彼此非常接近的数字:4、20、23、40、66。但是当数字开始变高时,它们之间的距离也会变大(实际上,它们之间的距离是偶然的)。没有重复的数字。

我正在使用位打包来节省一些空间。但是,此文件可能会变得很大。

我想知道在这种情况下可以使用哪种压缩算法,或者使用任何其他技术来节省尽可能多的空间。

谢谢。


阅读 502

收藏
2020-07-28

共1个答案

小编典典

如果您知道数据的真实分布,则可以进行最佳压缩。如果可以为每个整数提供概率分布,则可以使用算术编码或其他 熵编码 技术将其压缩为理论上的最小大小。

诀窍在于准确预测。

首先,您可能应该压缩数字之间的 距离 ,因为这可以使您做出统计报表。如果直接压缩数字,则很难建模,因为它们只会出现一次。

接下来,您可以尝试建立一个非常简单的 模型来预测 下一个距离。保留所有以前看到的距离的直方图,并根据频率计算概率。

您可能需要考虑缺失值(您显然无法为它们分配0的概率,因为这无法表达),但是您可以为此使用启发式方法,例如逐位编码下一个距离并分别 预测每个位
。您几乎不需要为高阶位支付任何费用,因为它们几乎始终为0,并且熵编码会将其最优化。

如果您 知道
分布情况,
那么所有这些操作都将更加简单。示例:您正在压缩所有素数的列表,因此您知道距离的理论分布,因为存在公式。这样您已经有了一个完美的模型。

2020-07-28