Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 为什么链式哈希表中的成功搜索的时间复杂度为Θ;平均为(1+;(n/m))?_Algorithm_Search_Hashtable_Time Complexity_Big Theta - Fatal编程技术网

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

Algorithm 为什么链式哈希表中的成功搜索的时间复杂度为Θ;平均为(1+;(n/m))?,algorithm,search,hashtable,time-complexity,big-theta,Algorithm,Search,Hashtable,Time Complexity,Big Theta,我明白了为什么链式哈希表中不成功的搜索平均具有Θ(1+(n/m))的时间复杂度,因为在不成功的搜索中检查的元素的预期数量是(n/m),并且所需的总时间(包括计算hashFunction(key)的时间)是Θ(1+(n/m))。但是为什么成功的搜索是一样的呢?在链式搜索中成功的搜索具有时间复杂性O(1+n/m)而不是Θ(1+(n/m),因为如果你找到了你的元素,你就可以停止。没有必要查看其余的元素。根据“算法:设计和分析”Cormen等人。在具有单独链接冲突解决方案的哈希表中成功搜索期间,预期的键

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

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

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


时间复杂度:Θ(1+1+α/2-α/2n)=Θ(1+α),根据大θ符号的定义。

成功搜索

符号:α=n/m=荷载系数

数学证明

1) 假设在链表的末尾插入了新元素
按绝对值计算,成功搜索和失败搜索的总时间不相等。只有当我们讨论渐近符号时,它们才相等

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

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

因为这个x值可能是1到n(因为键k1总是在表中),所以我们将(n-x)从1到n求和,然后乘以进入添加键k1的相同索引的概率。P(h(任意键)=1/m

因此,平均值为: 1+{(1/n)(总和(1/m)(n-x))}

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

你是在问
1
?答案在你的问题中是正确的。在这幅图中,“1怎么能从求和中求出来?”你给出了一个精彩的解释!非常感谢!我唯一没有得到的是,你为什么把求和的结果除以
1/n