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

时间:2015-06-08 13:28:59

标签: c# algorithm performance hash hashtable

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

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

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

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

1 个答案:

答案 0 :(得分:0)

添加“ASCII值”是教育哈希函数的良好开端。您对最大值的关注值为2440是有效的。获得更多不同数字的一种简单方法是:

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

乘法将位传播到左侧,使所有位与许多其他位交互。

您可以逐步改进此功能。