【发布时间】:2016-01-06 18:26:10
【问题描述】:
好的,我有一个项目需要我有一个动态哈希表来计算文件中单词的频率。我必须使用 java,但是,我们不允许使用任何内置数据类型或内置类,除了标准数组。此外,我不允许在 Internet 上使用任何已知速度快的哈希函数。我必须制作自己的哈希函数。最后,我的导师还希望我的表从大小“1”开始,并且每次添加新键时大小加倍。
我的第一个想法是对组成单词的字母的 ASCII 值求和,并用它来做一个散列函数,但是具有相同字母的不同单词将等于相同的值。
我该如何开始? ASCII 的想法是否正确?
【问题讨论】:
-
可以利用字母在单词中的位置来改进散列函数。
-
如果多个单词创建相同的哈希值就可以了。哈希不应该是唯一的。事实上,如果被散列的数据大于散列,它就不可能是唯一的。哈希确定密钥存储在哪个桶中,但随后执行相等检查以确保
-
如果每次添加新键时将数组的大小加倍,添加 32 个键将导致数组有 40 亿个条目宽:/ - 也许它们意味着每次填满时大小都会加倍