【发布时间】:2016-12-22 07:10:56
【问题描述】:
我有 3 个非负整数和一个数 n,这样
0 <= a <= n, 0 <= b <= n, and 0 <= c <= n.
我需要一个单向哈希函数,将这 3 个整数映射到一个整数(可以是任何整数,正数或负数)。有没有办法做到这一点,如果有,怎么做?有没有办法让这个函数可以表示为一个简单的数学表达式,其中唯一的参数是 a、b、c 和 n?
注意:我需要这个函数,因为我在 python 的字典中使用 3 个整数的元组作为键,并且使用超过 10^10 键,空格是一个真正的问题。
【问题讨论】:
-
您已经确定现有的散列算法已经不起作用了?或者使用嵌套字典不是一个可行的解决方案?
-
我尝试使用嵌套字典,但它们似乎并没有显着提高内存使用率。现有的散列算法确实有效,但速度是一个问题,由于这是一种单向散列并且具有非常具体的限制,我认为可能有一种更快更简单的方法。
-
散列与否,您仍然会有相同数量的条目 - 您确定是导致问题的关键“深度”吗?
-
不,我认为这只是 Python 为元组分配了更多的内存:sys.getsizeof((1, 2, 3)) 是 72,而 sys.getsizeof(100000000) 只是 28。
-
首先想到的是
a * (n + 1)^2 + b * (n + 1) + c。它不会碰撞 :) 当然,它取决于最大n,因此它可以适合整数 \ 64 位整数。