例如,我有一个包含52个在0到52之间的混洗整数的数组 - 没有重复的值。
如何根据算法对此数组进行编码,使其可以表示为较少的数字,然后再次解码并再现原始值?
我原以为我可以创建一个大的二进制字符串,并将0或1的组分组作为字符组合,然后对其进行扩展。这会是要走的路吗?感谢
答案 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阵列的功率吗?这是你的要求吗?