我对线性搜索中的以下两种情况感到困惑。我先在这里写一下线性搜索算法。
线性搜索的伪代码
输入:未排序的阵列A&键
输出:索引i使得A [i] =密钥
LinearSearch(A,low,high,key)
if high < low
return NOT_Found
if A[low] = key
return low
return LinearSearch(A,low+1,high,key)
本书的大部分内容都是O(n)。有什么区别
当数组中存在键时,复杂性会降低到O(1)的原因是什么?非常感谢你!
答案 0 :(得分:1)
您的问题基于最佳情况。最好的情况是你的钥匙在第一个位置(O(1))。更实际的是两种情况下的平均情况O(n)
答案 1 :(得分:1)
当数组中存在键时,是什么原因 复杂性将降低到O(1)?
由于考虑了两种情况,数组中键的存在会产生影响:
密钥存在于数组 中:那么您的运行时间最佳情况是 O(1)< / strong>,这意味着你必须移动常数才能找到它(例如它将是第二个元素,第10个元素,第一个元素通常是常数)。如果密钥存在,那么最坏的情况是它在数组中的 O(n)位置,因此您至少需要Ω(n)步骤,当然最大步骤是搜索数组中的所有n个位置,使 O(n)证明最坏情况Θ(n)。
密钥不存在 :在这种情况下,给定数组和数组中不存在的密钥,您的线性搜索算法会尝试发现它必须检查所有元素才能找到它,因为算法有两个终止条件:找到密钥或者数组已经结束。在课程中,将找不到这种情况下的密钥,并且在检查所有元素后算法将终止。这里的一个观察是,如果密钥不存在,算法将在最佳或最差情况下完成 O(n)步骤,如果密钥不存在最佳且最坏情况是相同的,因为在你搜索整个阵列!!
在两种情况下,如下所述,最坏的情况是 θ(n) 。