str*_*ger 5 integer numbers unique
给定 2 个整数 a 和 b(正数或负数)。有没有生成唯一ID号的公式/方法?
\n\n注意: 1. f(a,b) 和 f(b,a) 的结果应该不同。2. 计算 f(a,b) x 次 (x > 1),结果应该相同。
\n\n为了弄清楚这个问题,这个函数 f(n) = (n * p) % q (其中 n=输入序列值,p=步长,q=最大结果大小,n=非负整数,n < q , p < q, p \xe2\x8a\xa5 q (coprime)) 将给出唯一的 ID 号。
\n\n但是,在我的要求中,输入是两个数字,a和b可以是负整数或正整数。
\n\n任何参考都是值得重视的
\n假设你的整数的范围是[MIN_INT,MAX_INT]. 然后,给定n这个范围内的一个整数,函数
f(n) = n - MIN_INT
Run Code Online (Sandbox Code Playgroud)
f(n)属性是范围内唯一的正整数[0, MAX_INT - MIN_INT],通常称为排名。
表示M = MAX_INT - MIN_INT + 1. g(n,m)然后,要查找两个连接整数n和的唯一 id m,您可以使用也用于二维数组的常见访问样式:
g(n,m) = f(n)*M + f(m)
Run Code Online (Sandbox Code Playgroud)
也就是说,您只需将第二个整数偏移最大可能值并继续下去。
当然,实际上,您必须小心以避免溢出——也就是说,您应该使用一些合适的数据类型。
这是一个例子:假设你的整数来自范围[-1,4],因此M=6。然后,对于两个整数n=3并且m=-1超出这个范围,g(n,m) = 3*6 + 0 = 18可以用作id。