您的位置:首页 > 其它

字符串Hash函数

2011-08-23 21:38 204 查看
实例一:

int hash(const char* str, int M)
{
int i, l = (strlen(str)+1) / 2;
unsigned int ret = 0;
unsigned short *s = (unsigned short*)str;
for (i = 0; i < l; i++)
{
ret ^= (s[i] << (i & 0x0F));
}
return ret % M;
}


实例二: Follow/Noll/Vo Hash

inline uint32_t hash_value(uint8_t *key,uint32_t len)
{
uint32_t hash_value_ = 0;
uint8_t *begin = key;
uint8_t *end = ken+len;
for(hash_value_ =  0; begin < end; ++begin)
{
hash_value_ *= 16777619;
hash_value_ ^= (uint32_t)*begin;
}
return hash_value_;
}


实例三:Brian Kernighan
and Dennis Ritchie 碰撞率非常低

int BKDRHash(char * str)
{
unsigned int seed = 13131313;                /*        31 131 1313 13131 131313 etc..        */
unsigned int hash = 0;

while (*str)
{
hash = hash * seed + (*str++);
}

return (hash & 0x7FFFFFFF);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: