从两个整数生成唯一ID号

时间:2015-03-21 20:58:28

标签: numbers integer unique

给出2个整数a和b(正或负)。是否有用于生成唯一ID号的公式/方法?

注意:1。f(a,b)和f(b,a)的结果应该不同。 2.计算f(a,b)x次(x> 1),结果应相同。

为了弄清楚这个问题,这个函数f(n)=(n * p)%q(其中n =输入序列值,p =步长,q =最大结果大小,n =非负整数, n< q,p< q,p⊥q(coprime))将给出唯一的ID号。

但是,根据我的要求,输入是两个数字,a和b可以是负整数或正整数。

任何参考文献都很明显

2 个答案:

答案 0 :(得分:2)

你可以通过右移第一个整数为32然后加上第二个整数,从2个整数(32位)生成一个长(64位)。

private long uniqueId(int left, int right) {
    long uniqueId = (long) left;
    uniqueId = uniqueId <<< 32;
    uniqueId += (long) right;
    return uniqueId;
}

答案 1 :(得分:1)

假设您的整数的范围为[MIN_INT,MAX_INT]。然后,给定此范围内的整数n,函数

f(n) = n - MIN_INT

f(n)范围内归属唯一的正整数[0, MAX_INT - MIN_INT],通常称为 rank

表示M = MAX_INT - MIN_INT + 1。然后,要查找两个连续整数g(n,m)n的唯一ID m,您可以使用也用于二维数组的公共访问样式:

g(n,m) = f(n)*M + f(m)

也就是说,您只需将第二个整数偏移最大可能值并依靠。

实际上,当然,为了避免溢出,你必须小心 - 也就是说,你应该使用一些合适的数据类型。


以下是一个示例:假设您的整数来自[-1,4]范围,因此M=6。然后,对于此范围之外的两个整数n=3m=-1g(n,m) = 3*6 + 0 = 18可用作id。