c语言 实现整数到整数的快速映射,以唯一且确定的方式将两个整数映射到一个整数...

本文介绍了如何使用C语言实现整数到整数的高效映射,特别是针对16位整数的映射。文章讨论了Cantor配对函数的限制,并提出Szudzik函数作为替代方案,该函数能够更好地利用32位整数的范围。还探讨了如何处理有符号整数,以确保输出在有符号32位整数范围内。
摘要由CSDN通过智能技术生成

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的功能:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值