3 个整数的哈希函数

标签 hash hashcode

我有 3 个非负整数和一个数 n 使得

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

我需要一个单向哈希函数,将这 3 个整数映射到一个整数(可以是任何整数,正数或负数)。有没有办法做到这一点,如果是这样,怎么做?有没有办法让这个函数可以表示为一个简单的数学表达式,其中唯一的参数是 a、b、c 和 n?

注意:我需要这个函数,因为我使用 3 个整数的元组作为 python 字典中的键,并且 10^10 键,空间是一个真正的问题。

最佳答案

Cantor 配对函数 (https://en.wikipedia.org/wiki/Pairing_function#Cantor_pairing_function) 怎么样?

让 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 个整数的哈希函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38965931/

相关文章:

java - JVM 默认 Object.HashCode() 实现背后的原因

Java - 如何撤消 hashCode() 并读取为字符串?

equals - Java TreeSet 不存储唯一值

javascript - 为什么 javascript 中的 `btoa` 编码适用于 20 位字符串而不是 20 位 int?

algorithm - 如何使用 HashMap 查找一个点属于哪个区域?

vba - 如何使用 VBA 获取文件的 MD5 十六进制哈希值?

java - hashmap 中的 bucket 到底是什么?

java - 对于高效的散列键,重写等于不是强制性的

ruby - 使用 Ruby 将哈希数组转换为 CSV

c# - 使用 Xamarin (Mono C#) 和 .Net 生成相同的 key