如何从其他三个数字中创建一个唯一的数字?

时间:2015-02-01 12:09:44

标签: hashcode

我有三个数字:N,M和D,我被告知:

  

N * M * D <= 5,200,000

还有那个

  

N <= 1000,M <= 1000,D <= 200

所以我无法声明一个大小为[1000][1000][200]的数组。我想要声明一个大小为5,200,000的数组,并确定每个N,M,D的唯一ID。

抱歉我的英文。

3 个答案:

答案 0 :(得分:0)

假设NMD都是>= 0

((N * 1001) + M) * 1001 + D

应该是无碰撞的。

答案 1 :(得分:0)

因此它们可以用10位(或更少)表示,那么为什么不用(D <&lt; 20)|(M <&lt; 10)|(N)?它适合32位整数,所以很不错。

答案 2 :(得分:0)

我找到了一个问题的答案,符合5,200,000个整数的限制。

令a-b-c是我们想要从中得到唯一值的三个数,并且n-m-d是它们的极限(a&lt; = n,b <= m,c <= d)。 a-b-c中的每个数字都代表一个来自不同基数的数字,我们的目标是将这个数字转换为十进制数。

  

唯一值= c +(b * d)+(a * m * d)

设K为唯一值,我们想得到K代表的状态(a,b,c)

  

C ^ = K%d;

     

K / = d;

     

B =ķ%米;

     

K / =米;

     

在进行= K;