【发布时间】:2014-05-17 08:05:33
【问题描述】:
我正在编写一个能够解决单词谜题的程序。本质上,我通过 Infile.txt 获取字典并用它创建一个哈希表。我将使用单独的链接,并将 java LinkedList 类用作哈希表的第二级(使用指向链接列表的简单数组)。随意提出一个更好的解决方案,因为我是一个新手数据结构。 读完字典后,我将根据来自 infile 的混乱字符串列表在哈希表中搜索单词。我现在不担心搜索。
字典大小为109530。那是输入数据的恒定大小。你会说哈希表的最佳大小是多少?我读过关于此的相互矛盾的东西,所以我想我会在这里问,所以请稍微解释一下你的推理。
最后,我将使用以下函数作为哈希函数:
Hash(string) = ( SumOf(AsciiValOfChar() * CharPosInString()) ) mod TableSize;
示例:字符串“abc”将为97(ascii value of 'a') * 1 + 98 * 2 + 99 * 3 mod tablesize。
因此,如果表大小为10,“abc”将为= 0 = 590 mod 0。
对这个哈希函数有什么想法吗?
非常感谢大家,非常感谢您抽出宝贵的时间。
编辑:我没有使用 Java hastable / hashmap 类,而是我需要自己编写。这是一个练习。
【问题讨论】:
-
你已经尝试过你的方法了吗?我的意思是,您是否创建了一个 HashTable 并用所有单词填充它?如果您想测试哈希函数的行为方式以及是否需要调整,那将是一件好事。
-
在设计哈希表方案时有许多不同的考虑因素。但作为一般规则,假设您不为“同义词”使用辅助哈希,您希望将每个桶的“同义词”数量保持在最低限度(1 是理想的),同时不浪费空间桶。在某种程度上,这取决于您的散列算法的分布情况,也取决于您的溢出策略是什么,但对“最佳”表大小的一个很好的猜测是条目总数的一半。