我有一个程序,它使用哈希表和链接来保存最多100.000个字符串。每个字符串的最大长度为20,由(a-z)和(1-9)的混合组成,并且是唯一的。
要将其保存到哈希表中,我可以通过将字符串的ASCII值相加来将字符串转换为数字。这意味着可能的最大数量是2440(20倍z)。
我无法为此考虑最佳哈希函数(算法效率明智)。我在Google上搜索过,但我还没有找到很多有关如何找到最佳哈希函数的详细信息。
我尝试使用哈希%m(其中m是素数)作为哈希函数,但我的程序仍然很慢。
答案 0 :(得分:0)
添加“ASCII值”是教育哈希函数的良好开端。您对最大值的关注值为2440是有效的。获得更多不同数字的一种简单方法是:
int hash = 1234;
foreach (var c in chars) {
hash += c;
hash *= 37;
}
乘法将位传播到左侧,使所有位与许多其他位交互。
您可以逐步改进此功能。