【问题标题】:How to implement hashing for the following如何为以下实现散列
【发布时间】:2012-11-16 03:09:26
【问题描述】:

我正在尝试编写一个使用散列来解决以下问题的 Java 程序。给定一个自然语言文本,生成一个不同单词的列表,其中包含文本中每个单词的出现次数。在程序中插入适当的计数器,将哈希的经验效率与相应的理论结果进行比较。

我了解散列和散列表的基本原理,但我不知道如何将其实现到计算机程序中。我的教科书没有给出例子,我的教授在我的课上也从来没有复习过任何具体的例子。

我相信程序应该首先扫描文件中的文本,但我不知道接下来该去哪里。

感谢您的帮助。

【问题讨论】:

  • 这是我用 Java 编写的 HashTable 类。它可能会有所帮助。 github.com/JohnKurlak/HashTable/blob/master/HashTable.java。只需在空格处拆分您的文本以获取单词。如果当前单词在哈希表中,则增加计数。如果当前单词不在哈希表中,则在该位置将计数设置为 0。
  • java.util.Hashtable 和你的有什么区别?

标签: java algorithm hash hashtable


【解决方案1】:

这是我的解释,你的任务是什么。

您假设简单地将文件拆分为单词并将它们插入到HashMap<String,Integer>(或具有哈希表实现的 Map)中。您还应该对插入、随机检索进行计时,甚至可能在地图上进行成员资格测试。

然后,您将对不同的文件(不同大小)重复相同的操作,并验证所花费的时间是否与理论结果相符。

【讨论】:

    【解决方案2】:

    听起来你只需要研究散列。散列一般采用一系列值并将它们映射到一些较小的范围内。所以一个简单的哈希函数可能是:

     public int hash(int value)
     {
       assert value >= 0 && value < 1000;
       return value % 10;
     }
    

    所以我的哈希函数从 (0 到 999) 范围内获取数字并将它们映射到 (0 到 9)。一个好的散列函数会将值均匀地分配到结果范围内。

    您的目标是将每个单词映射到哈希表中的某个索引,这不像我的示例那样简单。您将不得不对散列字符串进行一些研究。

    祝你好运!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-17
      • 1970-01-01
      • 2014-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-21
      • 1970-01-01
      相关资源
      最近更新 更多