我需要找到一个给定两个整数的唯一整数。也就是说,给定两个整数x和y ..我想找到一个函数f ...,它将这些整数唯一地映射到另一个整数z。那是, Z = F(X,Y)
这里x = 64位整数,y = 64位整数。我想将这些数字映射到z,这样它又是64位整数。
我尝试了Cantors配对功能,但Cantors配对功能返回给我一个'z',它是128位,因为Cantors配对功能涉及到一个乘法。我不希望z映射到128位,因为现代计算机的处理限制只有高达64位。
有一些出路吗?我可以接受一点碰撞。
答案 0 :(得分:7)
如果你想在整个64位整数范围内这样做,那么这是不可能的。
您的函数有2^64 * 2^64 = 2^128
个可能的输入,但您只有2^64
个不同的输出,这意味着必须至少有2^64
个数字映射到相同的整数,这是远远超过a little bit of collision
答案 1 :(得分:0)
您实际上在寻找64位散列函数。这是一个列表http://en.wikipedia.org/wiki/List_of_hash_functions
答案 2 :(得分:0)
也许这个功能'锅炉板'会有帮助吗?
unsigned long long f(
unsigned long long x,
unsigned long long y
)
{
/** many options here, including those in link provided by @xosp7tom's answer... **/
return(x*y);
}