构建哈希表/哈希函数

标签 c string hash hashtable hash-function

我想构建一个哈希表,在 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];
}

哈希函数有哪些不错的选择,或者我将如何构建一个?

谢谢。

最佳答案

为了哈希 C 字符串,我一直使用这个函数(取结果 % 你的哈希表的大小):

int hashstring(const char* s) {
  int key = 0;
  while (*s) {
    key = key*37 + *s++;
  }
  return key;
}

我不记得我最初是从哪里得到它的,但多年来它并没有让我失望。

关于构建哈希表/哈希函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2962207/

相关文章:

c - 如何将 char[] 转换为十六进制? C

c - 格式化字符串漏洞,意外结果

linux - Md5 哈希来识别和存档图像

c - C 中 pthread 的问题

c++ - 函数定义与其在 C 中的声明不匹配,但在 C++ 中匹配

c - 在 c 中用分隔符连接字符串

hash - 种子 info_hash 参数

c - 在 gdb 中找不到已知的行号

string - 使用 Ogden’s Lemma 与常规 Pumping Lemma 进行上下文无关语法

javascript - URL、哈希值或查询字符串中什么应该放在第一位?