【问题标题】:Hash Function Study Guide [closed]哈希函数学习指南
【发布时间】:2013-06-10 17:15:57
【问题描述】:

这是我期末考试学习指南上的一个问题,我似乎不明白。

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

这会是 64^10 之类的吗?

谢谢

【问题讨论】:

  • 这是一个相关(可能相同?)问题:stackoverflow.com/questions/34595/what-is-a-good-hash-function
  • 有很多很多的哈希函数可以工作。在不了解您(可能)受限于哪种操作的更多信息的情况下,很难回答。 64^10 毫无意义 - 它是一个常量值 - 它与散列有什么关系?
  • 先搜一下,没必要再问..
  • 你能具体点吗..不要在这里问问题..

标签: algorithm hash hashmap


【解决方案1】:

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

我假设您的 64<sup>10</sup> 数字意味着变量名称的可能性数量,但它有点错误 - 它应该是 52x62<sup>9</sup> 以限制第一个字符不能是数字,但无论如何,不允许短于十个字符的变量,因此它只是近似值。实际上,它类似于52 + 52x62 + 52x62<sup>2</sup> + 52x62<sup>2</sup> + ... + 52x62<sup>9</sup>

它也与散列函数本身几乎无关。

您可以选择的最简单的散列函数可能是通过变量名称提取每个“值”(0 到 61 表示 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

同样,这并没有考虑到字母的可能分布,但是,由于您没有提供这方面的信息,我们可以做的事情不多。

【讨论】:

    猜你喜欢
    • 2022-06-23
    • 1970-01-01
    • 1970-01-01
    • 2022-12-05
    • 2016-07-30
    • 2016-03-25
    • 2011-02-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多