c++ - 对于这个英语单词列表,什么是好的散列函数?

标签 c++ hashtable

目前,我使用的表大小为 80,因为文件中有大约 73 个单词。 我目前的散列方法非常基础和通用。我将字母的 ASCII 值加起来,然后我将它们全部设为小写,然后按表大小(当前为 80)mod (%) .我遇到了很多冲突,还有很多未使用的存储桶/索引。由于我确切地知道我需要散列哪些词以及多少词,是否有更好的方法可以使用,以尽可能减少冲突?我的目标是得到 6 个或更少。

另外,附带问题。一旦单词在哈希表中,如果我想查找某个单词,但输入错误或乱码的单词,我如何在哈希表中找到它?

例如,如果我在哈希表中有“apple”,并且我的搜索使用“leppa”,这是 apple 反向拼写,有什么用以这样的方式解读“leppa”的方法,苹果就会出来?

如果您对我刚才的问题不确定,请问我,如果我不清楚,请见谅!

最佳答案

Murmur hash 被认为是快速的并且可能会提供良好的分布 http://en.wikipedia.org/wiki/MurmurHash

为了在散列中查找“乱码”文本,您需要使用与字母顺序无关的散列函数 - 非常糟糕的主意,因为所有排列都将在同一个散列桶中

关于c++ - 对于这个英语单词列表,什么是好的散列函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43993026/

相关文章:

c++ - 数据写入被某些事件中断

C++——如何将一个字符串转换为多个整数?

c++ - SDL2 无法捕获控制台键盘事件?

python - 发生碰撞时Python dict如何存储key,value?

c - 哈希表 : double probe when collision

c++ - NEAT 突变何时发生?

c++ - C++ 中是否有等效的 str_replace?

algorithm - 设计哈希表

json - 将键/值对添加到哈希表(嵌套在数组中,嵌套在哈希表中)

c# - 哈希表中的列表丢失所有条目