我正在尝试编写一个使用散列来解决以下问题的 Java 程序。给定一个自然语言文本,生成一个不同单词的列表,其中包含文本中每个单词的出现次数。在程序中插入适当的计数器,将哈希的经验效率与相应的理论结果进行比较。
我了解散列和散列表的基本原理,但我不知道如何将其实现到计算机程序中。我的教科书没有给出任何例子,我的教授在我的课堂上也从不复习任何具体的例子。
我相信程序应该首先扫描文件中的文本,但我不知道该去哪里。
感谢您的帮助。
这是我的解释,你的任务是什么。
您假设简单地将文件拆分为单词并将它们插入到HashMap<String,Integer>
(或具有哈希表实现的 Map)中。您还应该对插入、随机检索进行计时,甚至可能在地图上进行成员资格测试。
然后,您将对不同文件(不同大小)重复相同的操作,并验证所花费的时间是否与理论结果相符。
听起来你只需要研究散列。散列一般采用一系列值并将它们映射到一些较小的范围内。所以一个简单的哈希函数可能是:
public int hash(int value)
{
assert value >= 0 && value < 1000;
return value % 10;
}
所以我的散列函数从(0到999)范围内获取数字并将它们映射到(0到9)。一个好的散列函数会将值均匀地分配到结果范围内。
您的目标是将每个单词映射到哈希表中的某个索引,这不像我的示例那样简单。您将不得不对散列字符串进行一些研究。
祝你好运!