假设我们有一个包含10个桶的哈希表,并且使用一个使用线性探测的散列函数来输入符号S1到S7。在搜索不存在的项时所需的最大比较数是多少?散列图可以解释为:
Index KEY
0-- S7
1- S1
2-空
3- S4
4- S2
5-空
6- S5
7-空
8-- S6
9- S3
假设我想找到一个元素S8 (显然不存在),..On计算S8的哈希函数,假设它跳到索引8,没有在索引8处找到元素,它通过线性探测检查下一个索引,等等。Now, the number of comparisons should come out to be total
我目前对哈希表的实现是使用线性探测,现在我想转移到二次探测(以及稍后的链接,也许也是双哈希)。我读过一些文章,教程,维基百科等等.但我还是不知道该怎么做。
线性探测,基本上,有一个步骤1,这是容易做到的。在从哈希表中搜索、插入或删除元素时,我需要计算一个散列,并为此执行以下操作:
index = hash_function(key) % table_size;
然后,在搜索、插入或删除表时,循环遍历该表,直到找到一个空闲的桶,如下所示:
do {
if(/* CHECK IF IT'S THE ELEMENT WE WANT */) {
// FOUND ELE
我在java中有一个自定义哈希表实现。
public class HashSet<T> implements HashTableInterface<T> {
private static int DEFAULT_ARRAY_SIZE = 10;
private T[] items;
public HashSet() {
final T[] items = (T[]) new Object[DEFAULT_ARRAY_SIZE];
this.items = items;
}
@Override
public boolean add(T item)
我现在学习的数据结构和算法类对算法的工作原理有很大的理解,但很少有实际的编码。我是个编程新手,所以对你们中的一些人来说,这可能是个愚蠢的问题。
从概念上讲,我理解散列,以及不同方法的原因,但我不知道如何编写这个赋值。
基本上,我们可以使用任何我们想要的源代码。这本书的代码是和
当使用这些代码中的任何一个时,我似乎很难将键插入到表中。我用这个块插入:
Random randomGenerator = new Random();
int randomInt = randomGenerator.nextInt(99999);
for (int i = 0; i < 100; i++) {
我正在构建一个表,其中尝试在发生冲突时将一个新键插入到表中,其顺序是{散列(X)+ i,其中i= 1,2,3,. }。如果我使用线性探测构建哈希表,那么Insert()算法会执行如下操作:
hashValue = hash(x)
while hashValue is taken in table
hashValue += 1
其中,我只在发生冲突时添加增量值,或者从i=1开始将增量值添加到哈希中,所以如下所示:
hashValue = hash(x) + 1
while hashValue is taken in table
hashValue += 1