为了账号安全,请及时绑定邮箱和手机立即绑定

双散列HashTable重新散列问题

双散列HashTable重新散列问题

明月笑刀无情 2021-11-24 14:46:13
我需要为学校项目实现一个具有开放寻址和双重哈希的哈希表。我最多可以添加 56 个条目,但是当它尝试添加第 57 个并对其重新哈希时,它说该单词存在(来自 addWord() 方法)而它不应该存在。for (int k = 0; k < 57; ++k) {    word = "s" + k;    h.addWord(word);    System.out.println("Word = " + word + " KEY = " + h.hash(word));    }输出:Word = s0 KEY = 0...Rehashing the table!Word = s4 KEY = 11...Rehashing the table!Word = s7 KEY = 14.........Word = s55 KEY = 45Rehashing the table!F28DA_CW1.WException: Word exist!    at F28DA_CW1.HTableWords.addWord(HTableWords.java:124)    at F28DA_CW1.HTableWords.rehash(HTableWords.java:178)    at F28DA_CW1.HTableWords.addWord(HTableWords.java:96)    at F28DA_CW1.test.main(test.java:17)这是我的代码:import java.util.Arrays;public class test {main 方法类(一切都被破坏了,因为 main 方法想要每个函数都是静态的)public class test {    public static void main(String[] args) {        test t = new test((float) 0.5);        String word = "";        for (int k = 0; k < 2000; ++k) {            word = "s" + k;            try {                t.addWord(word);            } catch (Exception e) {                // TODO Auto-generated catch block                e.printStackTrace();            }        }    }}错误似乎在 tempTable[j] = hTable[i]; 线 (166)。我无法弄清楚它有什么问题。任何帮助将不胜感激。我已经坚持了2天。编辑:所以问题现在出现在 doubleHash() 方法上,它在 100 个条目后给我一个负数 -27。有人可以验证公式是否正确吗?
查看完整描述

1 回答

?
四季花海

TA贡献1811条经验 获得超5个赞

现在您需要做的就是用自定义 mod 替换 % 操作,以避免负面结果。当我这样做时,我不再在输出中看到任何可疑的东西。


public static int mod2(int p, int q) {

    int m = p%q;

    if (m<0) return m+q;

    return m;

}


查看完整回答
反对 回复 2021-11-24
  • 1 回答
  • 0 关注
  • 151 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信