如何将两个正整数映射到唯一整数?

时间:2014-04-21 22:12:15

标签: c++ c

我需要找到一个给定两个整数的唯一整数。也就是说,给定两个整数x和y ..我想找到一个函数f ...,它将这些整数唯一地映射到另一个整数z。那是,         Z = F(X,Y)

这里x = 64位整数,y = 64位整数。我想将这些数字映射到z,这样它又是64位整数。

我尝试了Cantors配对功能,但Cantors配对功能返回给我一个'z',它是128位,因为Cantors配对功能涉及到一个乘法。我不希望z映射到128位,因为现代计算机的处理限制只有高达64位。

有一些出路吗?我可以接受一点碰撞。

3 个答案:

答案 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);
   }