哈希表:特定长度的最佳哈希函数?

Hashtables: best hash function for a certain length?

我有一个程序使用哈希表和链接来保存最多 100.000 个字符串。每个字符串的最大长度为 20,由 (a-z) 和 (1-9) 的混合组成,并且是唯一的。

为了将其保存到哈希表中,我通过将字符串的字符的 ASCII 值相加将其转换为数字。这意味着可能的最高数字是 2440(z 的 20 倍)。

我无法为此考虑最佳哈希函数(算法效率方面)。我在 Google 上搜索过,但没有找到很多关于如何找到最佳哈希函数的详细信息。

我已经尝试使用 hash % m(其中 m 是质数)作为哈希函数,但我的程序仍然很慢。

相加 "ASCII values" 是教育哈希函数的良好开端。您对最大值 2440 的关注是有效的。获得更多不同数字的一个好而简单的方法是:

int hash = 1234;
foreach (var c in chars) {
 hash += c;
 hash *= 37;
}

乘法将位向左传播,并使所有位与许多其他位相互作用。

您可以逐步改进此功能。