HashTable 中二次探测的运行时间是多少?

Posted

技术标签:

【中文标题】HashTable 中二次探测的运行时间是多少?【英文标题】:What is the runtime for quadratic probing in a HashTable? 【发布时间】:2015-05-13 18:02:48 【问题描述】:

这是与 Linear Probing Runtime 类似的问题,但它涉及二次探测。

对我来说,线性探测的“理论最坏情况是 O(n)”是有道理的,因为在最坏的情况下,您可能必须遍历每个桶(n 个桶)

二次探测的运行时间是多少?我知道二次探测以二次方式 -1, 4, 9, 16, ..... 我最初的想法是它是 log n(exponential) 的一些变化,但没有一致的底数。

【问题讨论】:

【参考方案1】:

如果您的哈希表中有n - 1 占用的桶,那么无论您检查空桶的顺序如何,您都不能排除在找到空桶之前需要测试n 桶的可能性一。因此,二次探测的最坏情况不会比 O(n) 更好。

然而,情况可能更糟:我并不清楚二次探测是否能很好地避免多次测试同一个存储桶。 (如果您选择与桶数相对质数的步长,这对于线性探测来说不是问题。)我会二次探测不会重新访问相同的桶足够多次以使比O(n) 更糟糕的情况,但我无法证明。

【讨论】:

但是有没有假设你正在使用一个循环数组? 循环与它无关。任何以固定顺序测试存储桶的技术(这是在添加元素后查找元素所必需的)——无论是绝对的还是相对于起始存储桶的——原则上都可以在找到空的存储桶之前测试每个被占用的存储桶。如果二次探测有任何优势,那么它将减少桶聚类。这对于平均运行时间可能是一个优势,但对于最坏情况的运行时间却不是。

以上是关于HashTable 中二次探测的运行时间是多少?的主要内容,如果未能解决你的问题,请参考以下文章

halcon12在C#中二次开发编译没错,运行时报: 无法加载DLL"halcon”

使用线性探测实现 Hashtable 时调整大小权衡

CAD 中二次开发

怎样在迅捷画图网站中二次编辑网络拓扑流程图模板

vue中二次封装elementUi的弹出框MessageBox 灵活就完事了

数据结构与算法—散列表