所以,我正在解决一个需要我在哈希表中按顺序插入密钥的问题。因为没有更多的空间,我在20后停止插入。我提供以下图片来帮助上下文。我创建了哈希表,找到了冲突次数和加载因子。通过开放寻址解决冲突。对不起,这不是问题,我只需要有人查看它并告诉我它是否正确。
答案 0 :(得分:2)
您的问题中存在许多错误和误解。
h(k,i)
k
是密钥,i
是桶的数量。在你的情况下i
是9,所以函数(k mod 9 + 5i) mod 9
真的没有意义。 mod i
结尾。这一点在维基百科关于hashtables的文章中有所解释。
在下面的评论中澄清了这个答案时,我使用以下代码来验证您的结论:
public class Hashing {
private static final int SIZE = 9;
private final int[] keys = new int[SIZE];
private int collisions = 0;
public void add(int key) {
int attempt = 0;
while (keys[hash(key, attempt)] > 0)
attempt++;
collisions += attempt;
keys[hash(key, attempt)] = key;
}
private int hash(int key, int attempt) {
return (key % SIZE + 5 * attempt) % SIZE;
}
public static void main(String[] args) {
Hashing table = new Hashing();
Stream.of(28, 5, 15, 19, 10, 17, 33, 12, 20).forEach(table::add);
System.out.println("Table " + Arrays.toString(table.keys));
System.out.println("Collisions " + table.collisions);
}
}
并收到以下输出:
Table [20, 28, 19, 33, 12, 5, 15, 10, 17]
Collisions 15