Tag:

哈希函数给了我非常大的数字

我正在使用c的djb2哈希函数,当我通过它运行一个名称时,我得到数十万的哈希值,我希望能够使用几千个数组将其放入哈希表中或者至少在一个长的内部。 我很困惑如何让函数给我较小的哈希值,同时仍然具有哈希的完整性。 另外,我对如何确定用于哈希表的数组的正确大小感到困惑。 先感谢您。 unsigned long hash(char* str) { unsigned long hash = 5381; int c; for (int i = 0; i < strlen(str); ++i) { c = (int) str[i]; hash = ((hash << 5) + hash) + c; } return hash; }

如何在c中使用双哈希进行搜索

我有一台服务器来接收来自多个客户端的请求。 我用线程完成了这个。 我想在哈希表中插入一些用户名和密码。 为此,我使用双哈希方法。 它已成功插入。 但是我想知道当用户输入用户名时,我需要在哈希表上搜索该用户名是否已经存在。 但我现在不能这样做。 我知道使用散列的概​​念。 使用hashfunction1通过用户名获取索引并使用像这样的双哈希。 但是我该如何编写该代码呢? 我的代码: int HashFunc1 (char *key,int size) { int i = 0,value = 0; for(i = 0 ; key[i] != ‘\0’; i++) { value += ( key[i] + ( i + 1 ) ); } return value % size; } int HashFunc2 (char *key,int size) { […]

构造哈希表/哈希函数

我想构建一个哈希表,查找从1到15个字节的字节序列(字符串)中的键。 我想存储一个整数值,所以我想一个哈希数组就足够了。 我很难概念化如何构造一个哈希函数,因为给定键会给出数组的索引。 任何援助都会受到很多关注。 散列中的最大条目数为:4081 * 15 + 4081 * 14 + … 4081 = 4081((15 *(16))/ 2)= 489720。 例如: int table[489720]; int lookup(unsigned char *key) { int index = hash(key); return table[index]; } 哈希函数有什么好的选择,或者我将如何构建一个? 谢谢。