Algorithm 二进制搜索的复杂性

Algorithm 二进制搜索的复杂性,algorithm,complexity-theory,big-o,binary-search,Algorithm,Complexity Theory,Big O,Binary Search,我正在看伯克利大学的在线讲座,并停留在下面 问题:假设您有一个已排序的CD集合。您想查找标题以“最佳”开头的CD列表 解决方案:我们将使用二进制搜索找到第一个“最佳”案例,然后打印,直到磁贴不再是“最佳” 附加问题:查找此算法的复杂性 上界:二进制搜索的上界是O(logn),所以一旦我们找到了它,我们就打印k title。所以它是O(logn+k) 下限:二进制搜索下限是欧米茄(1),假设我们很幸运,记录标题是中间标题。在这种情况下,它是ω(k) 我就是这样分析的 但在讲座中,讲师使用了最佳情况

我正在看伯克利大学的在线讲座,并停留在下面

问题:假设您有一个已排序的CD集合。您想查找标题以“最佳”开头的CD列表

解决方案:我们将使用二进制搜索找到第一个“最佳”案例,然后打印,直到磁贴不再是“最佳”

附加问题:查找此算法的复杂性

上界:二进制搜索的上界是O(logn),所以一旦我们找到了它,我们就打印k title。所以它是O(logn+k)

下限:二进制搜索下限是欧米茄(1),假设我们很幸运,记录标题是中间标题。在这种情况下,它是ω(k)

我就是这样分析的

但在讲座中,讲师使用了最佳情况和最坏情况。 我有两个问题:

  • 为什么需要使用最佳情况和最坏情况,big-O和Omega不被认为是算法可以执行的最佳和最坏情况吗
  • 他的分析是正确的 最坏情况:θ(logn+k)
    最佳案例:θ(k)

    如果我使用最坏情况的概念来指代数据,与算法无关,那么是的,他的分析是正确的。 这是因为假设最坏的情况(最终的CD标题或未找到),那么大O和ω都是logn,这里是θ(logn+k)

    假设您不做“最佳情况”和“最坏情况”,那么您如何分析算法?我的分析正确吗


  • 对于第一个问题,算法的最佳情况运行时、算法的最坏情况运行时、大O和大Ω符号之间存在差异。算法的最佳和最差运行时是实际的数学函数,具有精确的值,告诉您算法将完成的最大和最小工作量。为了描述这些函数的增长率,我们可以使用大O和大Ω表示法。但是,可以用大Ω表示法描述函数的最佳情况行为,也可以用大O表示法描述最坏情况。例如,我们可能知道函数的最坏情况运行时可能是O(n2),但实际上不知道最坏情况行为是哪个函数。如果我们想对最坏情况下的行为设定上限,这样我们就知道它不是灾难性的坏行为,那么这可能会发生。在这种情况下,最坏情况的行为可能实际上是Θ(n),在这种情况下,O(n2)是一个坏的上界,但在这种情况下,如果说最坏情况的行为是O(n2),则表明它并不可怕。类似地,我们可以说一个算法的最佳情况行为是Ω(n),例如,如果我们知道它必须至少做线性功,但不能判断它是否必须做更多的线性功

    至于你的第二个问题,对算法的最坏情况和最佳情况行为的分析完全取决于输入数据的结构,通常很难在不查看算法在不同数据集上的表现的情况下分析算法的最佳和最坏情况行为。通过展示一些特定的输入族(注意,它必须是一个输入族,而不仅仅是一个输入,因为我们需要得到一个渐近界)并显示算法必须在该输入上运行不佳,来进行最坏情况分析是完全合理的。你可以用同样的方法做一个最好的案例分析

    希望这有帮助

    为什么需要使用最佳情况和最坏情况,big-O和Omega不被认为是算法可以执行的最佳和最坏情况吗

    不,ψ和Ω符号只描述了描述算法实际行为渐近行为的函数的边界。这是一个好主意

    • Ω表示下限:f(n)∈ Ω(g(n))意味着对于某些正k,f(n)的渐近行为不小于g(n)·k,因此f(n)总是至少等于g(n)·k
    • ⑩描述了上界:f(n)∈ ⑩(g(n))意味着对于某些正k,f(n)的渐近行为不超过g(n)·k,因此f(n)总是最多等于g(n)·k
    这两种方法可应用于二进制搜索的最佳情况和最差情况:

    • 最佳案例:您看到的第一个元素就是您正在寻找的元素
      • Ω(1):您至少需要一次查找
      • ⑩(1):您最多需要一次查找
    • 最坏情况:元素不存在
      • Ω(logn):您至少需要logn个步骤,直到您可以说您要查找的元素不存在为止
      • ⑩(对数n):在您可以说您正在寻找的元素不存在之前,您最多需要对数n步骤
    你看,Ω和Ⅹ的值是相同的。在这种情况下,你可以说最好情况下的紧界是Θ(1),最坏情况下的紧界是Θ(logn)

    但通常我们只想知道上界或紧界,因为下界没有太多实际信息

    假设您不做“最佳情况”和“最坏情况”,那么您如何分析算法?我的分析正确吗


    是的,您的分析似乎是正确的。

    您的问题最简单的答案是: