将52个整数编码为较少量的好方法是什么?

时间:2011-08-02 09:44:15

标签: algorithm binary compression

例如,我有一个包含52个在0到52之间的混洗整数的数组 - 没有重复的值。

如何根据算法对此数组进行编码,使其可以表示为较少的数字,然后再次解码并再现原始值?

我原以为我可以创建一个大的二进制字符串,并将0或1的组分组作为字符组合,然后对其进行扩展。这会是要走的路吗?感谢

4 个答案:

答案 0 :(得分:8)

有52个! (这是五十二个阶乘)不同的数组,就像你描述的那样。顺便说一句,他们被称为排列。 0到52之间的单个数字!唯一代表这种排列。您需要226位来存储这样的数字。八个32位整数也可以。

您可以阅读有关将数字映射到排列并返回here的信息。

答案 1 :(得分:0)

您需要一个6位var来存储低于64的值。 联盟是关键

union DATAPACK
{
    unsigned int code1 : 6;
    unsigned int code2 : 6;
    unsigned int code3 : 6;
    unsigned int code4 : 6;
   ....
} array1; 

答案 2 :(得分:0)

如果你的范围是0到52,那么你只需要6位来存储每个数字 - 所以不是52个字节(假设你每个数字使用1个字节),你只需要52 x 6/8或39个字节。 / p>

除非你有数万亿的存储空间,否则几乎不值得保存。

答案 3 :(得分:0)

如何在四叉树或空间索引中对数组进行分区,然后使用空间填充曲线来降低复杂度?也许z曲线可以做到或者是希尔伯特曲线?你需要2个2d阵列的功率吗?这是你的要求吗?