如何将两个正整数映射为一个唯一的整数

How to map two positive integers to a unique integer?

本文关键字:整数 一个 唯一 映射 两个      更新时间:2023-10-16

我需要在给定两个整数的情况下找到一个唯一的整数。也就是说,给定两个整数x和y,我想找到一个函数f…,它将这些整数唯一地映射到另一个整数z,z=f(x,y)

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

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

有出路吗。一点点碰撞对我来说是可以接受的。

如果您想对整个64位整数范围执行此操作,那么这是不可能的。

函数有2^64 * 2^64 = 2^128个可能的输入,但只有2^64个不同的输出,这意味着必须至少有2^64个数字映射到同一整数,这远远大于a little bit of collision

您实际上是在寻找一个64位的散列函数。这是一份清单http://en.wikipedia.org/wiki/List_of_hash_functions

也许"锅炉板"这个功能会有所帮助?

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);
   }
相关文章: