【问题标题】:Defining functions to determine HashTable stats定义函数以确定 HashTable 统计信息
【发布时间】:2016-01-28 20:28:45
【问题描述】:

好的,所以我有一个类可以将字典文件读入哈希表,以比较用户输入的单词并返回建议的单词。我的程序实现了一个 HashTable,它使用链表为值创建存储桶。我已经完成了程序,但在开发一种方法来打印最大链长度、表中使用的桶的百分比和平均链长度时遇到了麻烦。

public class DictionaryTable {

    public String workingDir = System.getProperty("user.dir");//stores uses working director
    public String DICT_FILENAME = "\\src\\dictionary.txt";
    public String D_PATH = workingDir + DICT_FILENAME;

    private int DICT_SIZE; //determines size of dictionary
    final private Bucket[] array;

包含上面的方法是为了了解我的类中使用的私有变量和散列函数。我还提供了我的哈希值以防万一。

private int hash(String key) {
        return (key.hashCode() & 0x7fffffff) % DICT_SIZE;
    }

【问题讨论】:

  • 你为什么不用HashMap?自己实现这个的原因是什么?
  • 哦,对不起,这是作业的一部分,所以我实现了自己的表
  • 这种东西很难。您可以查看 HashMap 的源代码以获取灵感。
  • 我不需要哈希图源代码,程序已经完成并且工作我只是在我的 Dictionary 类中添加方法以返回我在我的问题中列出的方法时遇到了麻烦。

标签: java arrays linked-list hashmap hashtable


【解决方案1】:

我在开发一种确定负载因子的方法时遇到了问题,

加载因子是在将表加倍之前允许在哈希表中插入多少键。例如。如果您的表格大小为 32 并且您的负载系数为 50%,那么当您有 16 个元素时,您的表格将翻倍。
负载因子可以是哈希表客户端传递的参数,即配置,也可以有一个默认值,在实际实现中是一个取决于哈希表变体的值(通常值为 ~75%)

最大链长,

您不应该考虑链条长度,而是考虑负载系数(阅读上一段)。决定链长不是一个好主意,因为你最终会因为 1 个桶已经“饱和”而将你的桌子加倍,而你桌子的其余部分可能没问题。

我的表中使用的存储桶的百分比

你无法确定。您的哈希函数及其好坏决定了分布。除非你有一个非常好的散列函数,否则你将无法利用散列表中的大部分存储桶(集群效应)

平均链长。

这又取决于您的哈希函数和冲突。您确实确定这一点。

【讨论】:

  • 好的,我只想打印这些统计数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-08
  • 2017-11-14
  • 2012-11-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多