【问题标题】:Linear Search difference between O(1) and O(n)O(1) 和 O(n) 之间的线性搜索差异
【发布时间】:2017-10-21 20:40:25
【问题描述】:

我对线性搜索中的以下两种情况感到困惑。我这里先写线性搜索算法吧。

线性搜索的伪代码

输入:未排序的数组 A & 键

输出:索引 i 使得 A[i] = key

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)。有什么区别

  1. 如果数组中存在键,则线性搜索的最佳运行时间 [Ans: O(1)]
  2. 如果数组中不存在键,则线性搜索的最佳运行时间 [Ans: O(n)]

是什么原因当key出现在数组中时,复杂度会降低到O(1)?非常感谢!

【问题讨论】:

    标签: arrays algorithm time-complexity linear-search


    【解决方案1】:

    您的问题基于最佳情况。最好的情况是您的密钥位于第一个位置 (O(1))。更实用的是平均情况,这两种情况都是 O(n)

    【讨论】:

    • 感谢您的解释。如果数组中不存在键,那么最好情况、平均情况和最坏情况之间有什么区别吗?另外,我了解到最坏的情况是 theta(n) 而不是 O(n)。如何解释差异?谢谢。
    • 如果键不存在,那么函数将在每种情况下(最佳、平均和最差)遍历整个数组 (O(n)) 如果键存在则最好的情况是O(1) 因为它可能在第一个索引(或前几个)上。平均和最坏情况仍然是 O(n),因为在最坏情况下,键位于最后一个索引上,平均值约为 O(n/2),即 O(n)
    【解决方案2】:

    当key出现在数组中时,是什么原因 复杂度会降低到 O(1)?

    考虑到这两种情况,数组中键的存在会有所不同:

    • 键存在于数组中:那么你的运行时间最好的情况O(1),这意味着您必须移动常数次才能找到它(例如,它将是第 2 个元素,第 10 个元素,第 1 个元素通常是 sth 常数)。如果密钥存在,那么最坏的情况是它在数组中的 O(n) 位置,因此您至少需要 Ω(n) 步,当然最大步骤是搜索数组中的所有 n 个位置,所以 O(n) 这证明了最坏的情况 Θ(n)

    • 键不存在:在这种情况下,给定一个数组和一个数组中不存在的键,您的线性搜索算法试图找到它他必须检查所有元素才能找到它,因为该算法有两个终止条件:找到键或数组已结束。当然,在这种情况下将找不到密钥,并且在检查所有元素后算法将终止。这里的一个观察是,如果密钥不存在,算法将在最佳或最坏情况下精确执行 O(n) 步骤,如果密钥不存在,最好和最坏情况是相同的,因为在你们都搜索整个数组!!

    在上述两种情况下,最坏的情况是 θ(n)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-25
      • 1970-01-01
      • 2014-07-16
      • 2021-03-19
      • 1970-01-01
      相关资源
      最近更新 更多