C语言 实现BKDR hash算法

BKDR hash算法用于计算字符串的hash值。

#include <stdio.h>

unsigned long long BKDRHash(char *str)
{
    unsigned long long hash = 0, seed = 31;
    for (int i = 0; str[i]; i++)
    {
        hash = hash * seed + str[i];
    }
    return hash;
}

int main()
{
    printf("%llu\n", BKDRHash("abc"));
    return 0;
}

结果是96354。

为了减少碰撞,字符串中每个字符都参与hash计算。
之所以使用奇数2^n-1,是因为CPU运算中移位和减法运算快。
之所以使用质数,是因为追求更好的散列。

posted on 2025-01-15 08:46  王景迁  阅读(22)  评论(0)    收藏  举报

导航