nawfal..
211
考虑到它的简单,快速和节省空间,Cantor配对功能确实是最好的之一,但是在这里,Matthew Szudzik在Wolfram上发表了更好的内容.Cantor配对函数(相对)的限制是2N如果输入是两位整数,则编码结果的范围并不总是保持在位整数的范围内N.也就是说,如果我的输入是两位16整数0 to 2^16 -1,那么就有2^16 * (2^16 -1)可能的输入组合,所以通过明显的Pigeonhole原理,我们需要一个至少大小的输出2^16 * (2^16 -1),它等于2^32 - 2^16,或换句话说,一个地图32理想情况下,位数应该是可行的.这在编程世界中可能没有多大实际意义.
康托配对功能:
(a + b) * (a + b + 1) / 2 + a; where a, b >= 0
两个最大16位整数(65535,65535)的映射将是8589803520,如您所见,它不能适合32位.
输入Szudzik的功能:
a >= b ? a * a + a + b : a + b * b; where a, b >= 0
(65535,65535)的映射现在为4294967295,如您所见,它是一个32位(0到2 ^ 32 -1)整数.这是这个解决方案理想的地方,它只是利用该空间中的每一个点,因此没有什么能够提高空间效率.
现在考虑到我们通常在语言/框架中处理各种大小的数字的签名实现这一事实,让我们考虑signed 16从-(2^15) to 2^15 -1(稍后我们将看到如何将输出扩展到跨越有符号范围的跨度)的位整数.既然a而且b必须是积极的,他们的范围从0 to 2^15 - 1.
康托配对功能:
两个最大16位有符号整数(32767,32767)的映射将是2147418112,它只是有符号32位整数的最大值.
现在Szudzik的功能: