algorithm - 二次探测哈希表的限制

标签 algorithm data-structures hashtable quadratic probing

我正在编写一个程序来比较哈希表中线性探测、二次探测和单独链接所需的平均访问次数和最大访问次数。

我做了3个案例的元素插入部分。从哈希表中查找元素时,我需要有一个结束搜索的限制。 在单独链接的情况下,我可以在下一个指针为空时停止。 对于线性探测,我可以在探测整个表(即表的大小)时停止。 我应该使用什么作为二次探测的限制?表格大小会影响吗?

我的二次探测函数是这样的

newKey = (key + i*i) % size;

其中 i 从 0 到无穷大变化。请帮助我..

最佳答案

针对此类问题分两部分分析i的增长:

第一个区间:i0size-1

对于这种情况,我暂时没有找到解决方案。希望会更新。

第二个间隔:isizeinfinity

此时i可以表示为i = size + k,则

newKey = (key + i*i) % size 
       = (key + (size+k)*(size+k)) % size
       = (key + size*size + 2*k*size + k*k) % size
       = (key + k*k) % size

因此可以肯定的是,在 i 达到 size 之后,我们将开始探测之前探测过的单元格。所以你只需要考虑i从0到size-1的情况。因为休息只是一次又一次的同一个故事。

到目前为止的故事: 一个简单的分析告诉我,我最多需要探测 size 次,因为超过了 size 次我开始探测相同的细胞。

关于algorithm - 二次探测哈希表的限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12121217/

相关文章:

c++ - 如何降低寻找最长之字形序列的时间复杂度?

algorithm - 使无向图成为强连通分量(SCC)

ios - 有效地在 Objective C iOS 中解析字符串

algorithm - 与 log(n) 行为混淆

python - 使用 API 进行排序或算法?

c - 制作一个完美的散列(所有连续的桶都满了),gperf 或替代品?

java - 如何根据 Java 中的几个条件从列表中删除重复项

c++ - 用数组实现BST,用链表实现堆

c++ - 不同数据结构的速度/内存使用估计

c++ - __gnu_cxx HashMap ,其键类型为 std::pair<std::string, unsigned int>?