我试图通过位移来实现Knuth的乘法算法,A = 2654435769 和散列大小为2 ^ p个元素 但是非移位和移位算法给出了不同的结果
我试图实现这两个alg:
template int mult_hash_simple(int key) { double A = 0.61803398863412439823150634765625; double exp = A*key; return max_key*(exp - (int) exp); } template int mult_hash_advanced(int key) { // const int w = 32; const unsigned long long A = 2654435769; unsigned long long r0 = key*A; return r0 & ( (1
UPD:更新了一些var类型。问题依然存在
答案 0 :(得分:0)
下面的函数有高级哈希逻辑,它等于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 ) ) ;
}