適用的字串hash函式
阿新 • • 發佈:2019-01-26
下面是綜合情況比較好的兩個字串hash函式,就當做一個筆記吧:
unsigned int BKDRHash(char *str) { unsigned int seed = 131; // 31 131 1313 13131 131313 etc... unsigned int hash = 0; while (*str) { hash = hash * seed + (*str++); } return (hash & 0x7FFFFFFF); } unsigned int JSHash(char *str) { unsigned int hash = 1315423911; // nearly a prime - 1315423911 = 3 * 438474637 if (*str == 0x00) { return 0; } while (*str) { hash ^= ((hash << 5) + (*str++) + (hash >> 2)); } return (hash & 0x7FFFFFFF); }
整型hash函式:
static int _GetIndex(unsigned int addr)
{
return (addr * 2654435769UL) >> 24;
}
static int indexFor(int hash, int length)
{
return hash & (length - 1); //一般長度應為2的冪次方
}