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”