📅  最后修改于: 2023-12-03 15:14:45.068000             🧑  作者: Mango
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哈希函数经常被用于哈希表、缓存、关键字索引和其他应用程序中,是一种非常优秀的哈希函数。