什么是运行与链接散列的时间最坏的情况?(What's the worst case runn

2019-10-29 04:47发布

假设哈希表的时隙的数目(表示n)为正比于表的元素数(说米)。 我们有N = O(M),负载因数L = O(M)/ M = 0(1)因此,在简单的均匀散列的假设,搜索需要一定时间上的平均值。 这意味着上的平均搜索需要时间正比于链表的长度,该长度为相同的所有时隙,因此时间常数。 但对于简单的均匀散列假设下运行时的最坏情况。 难道也是恒定的,或者它会O(1 + 1)。 请解释我很困惑。 [参考CLRS页260]

是否最坏情况下的时间简单的均匀散列的假设下取消成功的搜索将是相同的平均情况下的时间。 而最坏的情况下的时间简单的均匀散列的假设下,成功的搜索会比一般情况下的时间不同。

Answer 1:

在简单的均匀散列 (即一个假设的散列函数将平均分配项目到一个哈希表中的槽) 的假设下 ,相信对于查找操作的最坏情况下的表现会一样的平均情况(对于一个不成功查找) - Θ(n/m + 1)平均情况下每维基百科 )。

为什么? 那么,考虑到,在上述假设下,在表格中每个时隙将具有相同数目的在其链中的元素。 正因为如此,无论是平均情况和最坏的情况将涉及翻翻任何链中的所有元素。

这是,当然,相当乐观的假设 - 它实践中,我们很少能/从不预先确定的哈希函数,将均匀地分布一些未知的数据集(我们很少专门打造的散列函数的数据集),但是,在同一时间,我们不可能去真正的最坏情况。

一般情况下 ,运行的查找的时间或删除操作用于使用链接的哈希表中的最坏情况是Θ(n)

在这两种情况下,插入仍然可以实现为Θ(1)因为你可以插入在链的最前端。 也就是说,如果我们允许重复(如吉姆提到的),因为,如果没有,我们首先要检查它是否已经存在(即做一个查询)。

最坏的情况发生时,所有的元素散列为相同的值,因此你必须一个很长的链条,实际上把你的数据结构为链表。

|--------|
|element1| -> element2 -> element3 -> element4 -> element5
|--------|
|  null  |
|--------|
|  null  |
|--------|
|  null  |
|--------|
|  null  |
|--------|


文章来源: What's the worst case running time of Hashing with Chaining?