Knuth 的乘法散列函数通过位移位
Knuth's multiplication hash function via bit shifting
我尝试通过 A = 2654435769 的位移位来实现 Knuth 的乘法算法
和 2^p 个元素的散列大小
但是非移位和移位算法给出不同的结果
我是如何尝试实现这两个算法的:
模板
整数 mult_hash_simple(整数键)
{
双 A = 0.61803398863412439823150634765625;
double exp = A*key;
return max_key*(exp - (int) exp);
}
模板
整数 mult_hash_advanced(整数键)
{
// 常量 w = 32;
const unsigned long long A = 2654435769;
unsigned long long r0 = key*A;
return r0 & ( (1
更新:更新了一些变量类型。问题依然存在
以下函数具有等同于mult_hash_simple函数的高级哈希逻辑。
template<int max_key_power, int p>
int mult_hash_advanced(int key)
{
// const int w = 32;
const long long w_bit = 4294967295; // Integer representation of binary value that has last 32 ( which is w value ) bits as 1
const int A = 2654435769;
long long r0 = key*A;
return (( r0 & w_bit ) >> ( 32 - p ) ) ;
}
我尝试通过 A = 2654435769 的位移位来实现 Knuth 的乘法算法 和 2^p 个元素的散列大小 但是非移位和移位算法给出不同的结果
我是如何尝试实现这两个算法的:
模板 整数 mult_hash_simple(整数键) { 双 A = 0.61803398863412439823150634765625; double exp = A*key; return max_key*(exp - (int) exp); } 模板 整数 mult_hash_advanced(整数键) { // 常量 w = 32; const unsigned long long A = 2654435769; unsigned long long r0 = key*A; return r0 & ( (1
更新:更新了一些变量类型。问题依然存在
以下函数具有等同于mult_hash_simple函数的高级哈希逻辑。
template<int max_key_power, int p>
int mult_hash_advanced(int key)
{
// const int w = 32;
const long long w_bit = 4294967295; // Integer representation of binary value that has last 32 ( which is w value ) bits as 1
const int A = 2654435769;
long long r0 = key*A;
return (( r0 & w_bit ) >> ( 32 - p ) ) ;
}