目前,我使用的表大小为 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/