小智 5
Murmurhash是一个非常好的(强)快速哈希函数,已经对其进行了认真的测试。
http://sites.google.com/site/murmurhash/
虽然它本身并不专用于整数,但可以对其进行快速调整。我有这样一种替代措辞,如果您的话语没有随后记在记忆中,可能会更方便您:
#定义MURMURHASH2A_R 24
#define MURMURHASH2A_MULTIPLIER 0x5bd1e995
#define MURMURHASH2A_SEED 2166136261U //不建议使用种子,因此请使用FNV32_OFFSET_BASIS
#定义murmurhash2a_init(h)做{h = MURMURHASH2A_SEED; }而(0)
#define murmurhash2a_update(h,word)\
做{\
u_int mmh2ak =(字)* MURMURHASH2A_MULTIPLIER; \
mmh2ak ^ = mmh2ak >> MURMURHASH2A_R; \
mmh2ak * = MURMURHASH2A_MULTIPLIER; \
h * = MURMURHASH2A_MULTIPLIER; \
h ^ = mmh2ak; \
}而(0)
#define murmurhash2a_final(h)\
做{\
h ^ = h >> 13; \
h * = MURMURHASH2A_MULTIPLIER; \
h ^ = h >> 15; \
}而(0)
u_int哈希;
murmurhash2a_init(hash);
murmurhash2a_update(hash,firstint);
murmurhash2a_update(hash,secondint);
[...]
murmurhash2a_final(hash);
显然,这将返回0-2 ^ 32-1。murmurhash网站上有一个64位版本。整数转换为某个范围内的浮点数作为练习(除法)留给读者。