以唯一且确定的方式将两个整数映射为一个

想象两个正整数A和B。我想将这两个整数合并为一个整数C。

不能有其他整数D和E组合成C。因此,将它们与加法运算符组合起来是行不通的。例如,30 + 10 = 40 = 40 + 0 = 39 + 1叠加都不起作用。例如,“ 31” +“ 2” = 312 =“ 3” +“ 12”

此组合运算还应该是确定性的(始终在相同的输入下产生相同的结果),并且应始终在整数的正或负侧产生整数。

回答:

您正在寻找双射NxN -> N映射。这些用于例如燕尾加工。查看此PDF,了解所谓的配对功能。Wikipedia引入了特定的配对功能,即Cantor配对功能:

pi(k1,k2)= 1/2(k1 + k2)(k1 + k2 +1)+ k2

三句话:

  • 正如其他人已经明确指出的那样,如果您打算实现配对功能,您很快就会发现您需要任意大的整数(bignums)。
  • 如果不想在(a,b)和(b,a)对之间进行区分,请在应用配对功能之前对a和b进行排序。
  • 其实我说谎 您正在寻找双射ZxZ -> N映射。Cantor函数仅适用于非负数。但是,这不是问题,因为定义双射很容易f : Z -> N,就像这样:

  • 如果n> = 0,则f(n)= n * 2

  • 如果n <0,则f(n)= -n * 2-1

以上是 以唯一且确定的方式将两个整数映射为一个 的全部内容, 来源链接: utcz.com/qa/415318.html

回到顶部