改进数字压缩算法?

伤口

我有很多唯一的数字,全为正,顺序无关紧要0 < num < 2^32
例:23 56 24 26

最大的56需要6 bits空间。所以,我需要:4*6 = 24 bits总计。

为了节省空间,我执行以下操作:
首先对它们进行排序:(23 24 26 56因为顺序无关紧要)
现在,我得到了与上一个的不同之处:23 1 2 30

最大的30需要5 bits空间。
之后,我将所有数字存储在4*5 bits = 20 bits空间中。

问题:如何进一步改进该算法?

详细信息:自要求以来,数字大多在的范围内2.000-4.000少于的数字300非常罕见。数量16.000也非常罕见。一般来说,所有数字都会接近。例如,它们可以全部在1.000-2.000范围内,也可以全部在16.000-20.000范围内。数字总数将在到的范围内500-5.000

维克拉姆·巴特

您的第一步是一个很好的步骤,因为排序将差异最小化。这是一种改进算法的方法:

  1. 完成后对差异进行排序和计算。
  2. 在其上使用霍夫曼编码

霍夫曼编码的使用比您的步骤更重要。我会告诉你原因:

考虑以下数据:

1 2 3 4 5 6 7 4294967295

其中4294967295 = 2 ^ 32-1。使用您的算法:

1 1 1 1 1 1 1 4294967288

所需的总位数仍然是32 * 8

使用霍夫曼编码,频率为:

1 => 7
4294967288 => 1

霍夫曼码是1 => 04294967288 => 1

所需的总位= 7 * 1 +1 = 8位

霍夫曼编码可将大小减少32 * 8/8 = 32倍

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章