求可生成唯一整数结果的有序数对映射算法
数对(x,y)到唯一整数的映射方案
以下是几种适用于x < y场景的高效实现方法:
方法一:三角数公式映射
利用三角数的累加特性,直接通过公式生成唯一整数:
def F(x, y): # 假设x从0开始取值 return (y - 1) * y // 2 + x
原理:按y值分组,每个y对应的数对数量等于y(当x从0开始时),用三角数求和公式累加前y-1组的总数,再加上当前组内的x偏移量,确保每个(x,y)对应唯一整数。若x从1开始,公式调整为(y-2)*(y-1)//2 + x。
方法二:常数偏移映射
如果不需要连续的整数结果,可使用大常数偏移避免碰撞:
# 设定K为大于所有可能y值的常数,比如已知y最大为10000,K取10001 K = 10001 def F(x, y): return x * K + y
因为x < y < K,所以x*K + y不会出现重复的情况,每个数对对应唯一整数。
方法三:二进制拼接映射
通过二进制位拼接生成唯一整数,适用于数值范围有限的场景:
def F(x, y): # 假设x和y均为32位以内的整数 return (y << 32) | x
将y的二进制位左移32位后,与x的二进制位拼接,每个数对的二进制表示唯一,对应整数自然唯一。若数值更大,可调整移位位数(比如64位)。
内容的提问来源于stack exchange,提问作者Sergey Makarov
相关产品推荐
相关产品推荐

