一个非常简单的问题-有人能提供一个公式,将3个数字(x,y,z(转换为0到32767之间的单个整数吗。
1,1,2和2,1,1不应该是相同的结果值(我不想简单地将数字相加(,但将无限多的x,y,z压缩到一个小范围的数字中显然会经常得到相同的值。
该公式还需要适用于500050001000 等大数字
如果你需要在0到131068之间,那就好了,但不应该超过这个数字。
我能想到的一个解决方案是取每个x、y、z,并将它们分别分配给[032767]中2^15个可能值中的5位。一种方法是取每个x,y,z模2^5(将它们压缩为必要的5位(,然后相应地设置结果的位。最终结果应该看起来像
def compress(x,y,z):
x %= 32
y %= 32
z %= 32
return x + (y<<5) + (z<<10)
print (compress(5000,5000,1000))
>>> 8456
显然,这种方法经常会产生输出冲突(每当x、y或z是相同的模32时(,但正如您所说,这是不可避免的。