algorithm - "word"的哈希函数

标签 algorithm

我有以下“词”,我需要一个哈希函数。

单词 w 的形式为 w=character[character]digit[digit],方括号 [] 表示这些是可选的。字符是A,B...Z,数字是0,1,2...

所以有 26*26*10*10 =67600 个可能的单词,我需要一个包含 220 个条目的表的哈希函数。除法显然适用于此,但我正在寻找更容易计算的方法

非常感谢任何帮助

最佳答案

有超过 67,600 个可能的单词。你有:

  • 字符-数字(A9、Q3等):26*10(260)可能
  • 字符-字符-数字(AA3、BQ5等):26*26*10(6,760)可能
  • 字符-数字-数字(A95、G47等):26*10*10(2600)可能
  • 字符-字符-数字-数字: 26*26*10*10 (67,600) 可能

所以可能的单词总数是260+6760+2600+67600 = 77,220

它可以被 220 整除。所以你的“哈希函数”可以是一个简单的模数:

bucket = index % 220

我认为您找不到比模数更容易计算的东西了。您可以使用标准的字符串哈希码函数,但这将涉及多次移位和加法,最后可能是模数。您可以使用一个简单的校验和,这只是一些添加,但这不太可能使您的哈希表中的项目分布良好。由于可能项的总数是桶数的偶数倍,因此很难在速度或分布方面超越模数。

顺便说一句,@Thilo 的评论是正确的:您的可能性总数是 26*27*10*11。如您所说,第二个字符和第二个数字是可选的。如果您将可选属性视为另一个可能的字符(空字符),则第二个字符的字母表包含 27 个项目(26 个字母字符和空字符)。所以像“A99”这样的词实际上是这样的形式:

字符 空字符 数字 数字

关于algorithm - "word"的哈希函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44654365/

相关文章:

arrays - 计算无限重复字符串的(前缀、重复计数、后缀)切片

javascript - 如何将对象中的股票数据解析为数组

c - 为什么运行此代码时会出现运行时错误?

从给定的二维点列表中找到所有凸四边形的算法

algorithm - 如何除以 kn^p 形式的筛数?

algorithm - 半随机子集

python - 实现特定的比较功能

关于如何找到三个点的算法

algorithm - 连接偶数个无交点的节点

algorithm - Hopcroft–Karp 算法时间复杂度