哈希函数学习指南

时间:2013-06-14 05:57:27

标签: algorithm hash hashmap

这是关于我的决赛学习指南的问题,我似乎不理解。

问:假设所有变量名都需要以字母开头,可以是字母和数字的混合,并且区分大小写,最长可达10个字符。哈希表是1000个条目。建议一个适用于此表大小的哈希函数。

这会是64 ^ 10吗?

谢谢

1 个答案:

答案 0 :(得分:1)

有很多哈希函数适用于这些约束,它实际上取决于字符的可能分布,哪个是最好的。

我假设您的6410数字是变量名称的可能性数量,但它有点错误 - 它应该是52x629以限制第一个字符不能是数字但是,任何情况下,不允许变量短于十个字符,所以它只是近似值。实际上,它会像52 + 52x62 + 52x622 + 52x622 + ... + 52x629

它与哈希函数本身几乎无关。

你可以选择的最简单的哈希函数可能是通过变量名来提取每个“值”(26到大写为26,小写为26和10为数字),并根据该值简单地计算0到999之间的值。 :

def hashIt (varname):
    chars =
        "0123456789" +
        "ABCDEFGHIJKLMNOPQRSTUVWXYZ" +
         abcdefghijklmnopqrstuvwxyz"
    hashVal = 0
    for each char in varname:
        hashVal = (hashVal * len(chars) + chars.findIndexOf(char)) % 1000
    return hashVal

同样,这并没有考虑到可能的信件分发,但是,由于你没有提供相关的信息,我们可以做很多事情。