📜  djb2 哈希函数 c 解释 (1)

📅  最后修改于: 2023-12-03 15:14:45.068000             🧑  作者: Mango

djb2哈希函数

djb2是一种简单、快速、高效的字符串哈希函数,由Daniel J. Bernstein在1991年设计。这个函数以C字符串作为输入,生成一个32位无符号整数的哈希值。

函数实现

djb2哈希函数使用的是一个特殊的乘数33(即33是一个随意的常数,但是它必须是奇数,并且它的取值不能导致哈希值的溢出),然后把每个输入字符串中的字符依次乘上这个乘数,再把它们相加,最后得到一个哈希值。

unsigned long djb2(char* str)
{
    unsigned long hash = 5381;
    int c;

    while ((c = *str++))
        hash = ((hash << 5) + hash) + c; /* hash * 33 + c */

    return hash;
}
如何使用

以下是一个简单的示例,展示了如何使用djb2哈希函数:

#include <stdio.h>

unsigned long djb2(char* str);

int main(void)
{
    char* s = "hello, world!";
    unsigned long hash = djb2(s);

    printf("%s\t%lu\n", s, hash);
    return 0;
}

输出结果:

hello, world! 1223507400
性能分析

djb2哈希函数具有以下优点:

  • 算法简单,易于实现;
  • 计算速度快,几乎没有哈希冲突;
  • 生成的哈希值随机性好,分布均匀。

因此,djb2哈希函数经常被用于哈希表、缓存、关键字索引和其他应用程序中,是一种非常优秀的哈希函数。