为什么在链式哈希表中成功搜索的时间复杂度平均为Θ(1+(n / m))?

时间:2014-09-16 10:28:26

标签: algorithm search hashtable time-complexity big-theta

我得到为什么链式哈希表中的不成功搜索平均具有Θ(1+(n / m))的时间复杂度,因为在不成功的搜索中检查的预期元素数量是(n / m),并且所需的总时间(包括计算hashFunction(密钥)的时间)是Θ(1+(n / m))。但为什么成功搜索也一样呢?

4 个答案:

答案 0 :(得分:3)

根据Cormen等人的“算法:设计和分析”。在具有单独链接冲突分辨率的哈希表中成功搜索期间的预期密钥比较数是1 +α/ 2-α/ 2n [其中α= n / m]。直观的解释:由于这是一次成功的搜索,我们检查至少一个密钥(我们搜索它),以及链中其余一半的密钥。

时间复杂度:Θ(1 + 1 +α/ 2 - α/ 2n)=Θ(1 +α),根据big-theta表示法的定义。

答案 1 :(得分:2)

成功搜索

注释:α= n / m =负载系数

A)数学证明

1)假设在链表的末尾插入了一个新元素

2)插入第i个元素后,列表的预期长度为(i-1)/ m

3)如果搜索成功,预期检查的元素数量将是插入所需元素时检查的元素数量的1倍!

因此,预期检查的元素数量为

Calculation of expected time for successful search

现在添加'1'表示计算哈希函数的时间

我们得到了,

Final Answer

<强> B)直觉 为了成功搜索,您将计算散列函数O(1)并平均遍历链中一半的键

答案 2 :(得分:0)

在链接中成功搜索时间复杂度为O(1 + n / m)而不是Θ(1+(n / m),因为如果找到你的元素就可以停止。没有必要查看其余部分元件。

答案 3 :(得分:0)

以绝对值计,成功和不成功搜索的总时间不相等。只有当我们谈到渐近符号时,它们才相等。

成功搜索的总时间等于1 +所需键之前链表中元素的数量。 然后,这个问题归结为找到在链表中添加特定键之后将要添加的元素的平均数量。

假设要搜索密钥k1。最初,在准备表格时,将k1添加到T [h(k1)]的开头。 令添加键为k1的元素后的元素数为x。因此,我们仍然需要在表中添加(n-x)个元素。

由于此x值可能是1到n(因为密钥k1始终在表中),所以我们将1到n的(nx)相加,然后乘以进入相同索引的概率,其中密钥k1是添加。 P(h(任意键)= 1 / m

因此得出的平均值是:  1 + {(1 / n)(求和(1 / m)(n-x))}

x的下限和上限分别为1和n。 这就是Theta(1 + n / m)。