我正在寻找一个利用以下要求的哈希函数:
- N 个不同的整数值将存储在哈希表中
- 在任何给定时间点,哈希表中的值不会超过 M
- 哈希表在几个查询中保持静态(即在某些时候整个哈希表将被初始化,以下调用仅从哈希表中读取)
- 在哈希表初始化时已知最大可能的键值 K (K >> N)
- 每个查询到的键值对都存在于哈希表中
到目前为止,我使用的哈希函数如下: h(k) = 7 * k % M with M = PRIME_CLOSE_TO(7*N)
7有点随意。
您对如何改善这一点有什么建议吗?
我正在寻找一个利用以下要求的哈希函数:
到目前为止,我使用的哈希函数如下: h(k) = 7 * k % M with M = PRIME_CLOSE_TO(7*N)
7有点随意。
您对如何改善这一点有什么建议吗?
这是一个起点:http ://en.wikipedia.org/wiki/Perfect_hash_function
实际上,任何普通的散列函数都可以。但是如果您出于某种原因想要一个最小完美哈希,您可以查看一个执行完美哈希的库,例如:CMPH - C Minimal Perfect Hashing Library