Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hash 3个整数的哈希函数_Hash_Hashcode - Fatal编程技术网

Hash 3个整数的哈希函数

Hash 3个整数的哈希函数,hash,hashcode,Hash,Hashcode,我有3个非负整数和一个数字n 0 <= a <= n, 0 <= b <= n, and 0 <= c <= n. 康托配对函数()怎么样 让 H(a,b):=.5*(a+b)*(a+b+1)+b 然后 H(a,b,c):=.5*(H(a,b)+c)*(H(a,b)+c+1)+c 您提到需要一个单向散列,但根据您对内存约束的详细描述,似乎可逆散列也就足够了 这并没有使用a、b和c上下有界的假设。您已经确定现有的哈希算法不起作用了吗?或者说使用嵌套字典不是一

我有3个非负整数和一个数字n

0 <= a <= n, 0 <= b <= n, and 0 <= c <= n. 

康托配对函数()怎么样

让 H(a,b):=.5*(a+b)*(a+b+1)+b

然后

H(a,b,c):=.5*(H(a,b)+c)*(H(a,b)+c+1)+c

您提到需要一个单向散列,但根据您对内存约束的详细描述,似乎可逆散列也就足够了


这并没有使用a、b和c上下有界的假设。

您已经确定现有的哈希算法不起作用了吗?或者说使用嵌套字典不是一个可行的解决方案?我尝试过使用嵌套字典,但它们似乎并没有显著提高内存使用率。现有的散列算法确实有效,但速度是一个问题,因为这是一个单向散列,并且有非常具体的限制,我认为可能会有一种更快更简单的方法。散列与否,您仍然会有相同数量的条目。您确定是关键“深度”导致了问题吗?不,我认为这只是Python为元组分配了更多的内存:sys.getsizeof((1,2,3))是72,而sys.getsizeof(100000000)只是28。首先想到的是
a*(n+1)^2+b*(n+1)+c
。它不会发生冲突:)当然,它取决于最大值
n
,因此它可以放入一个整数\64位整数。我使用了这个的整数版本,当整数太大时,很快就会溢出。我注意到您使用了浮点文字0.5——这是使用浮点来避免溢出的吗?@wcochran Good point,老实说,我用它来为从stl文件(例如,3D打印)读取的浮点数字生成键。即使对于遇到溢出的无符号整数,我想这也不会是一个问题,因为您只关心生成大多数是唯一的键。(但溢出确实意味着这个散列不再是可逆的。)@wcochran关于0.5的注释,我实际上将其编码为除以2(通过对参数的重新解释),然后让溢出发生。