【问题标题】:Complexity of Binary Search二分搜索的复杂性
【发布时间】:2012-03-16 14:24:54
【问题描述】:

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

问题:假设您有一组已排序的 CD。您想查找标题以“Best Of”开头的 CD 列表。

解决方案:我们将使用二分搜索找到“Best Of”的第一个案例,然后我们打印直到该图块不再是“Best Of”

附加问题:找出这个算法的复杂性。

上界:二分搜索上界是 O(log n),所以一旦我们找到它,我们就会打印 let say k title。所以它是 O(logn + k)

Lower Bound:假设我们很幸运并且记录标题是中间标题,二分搜索下限是 Omega(1)。在这种情况下,它是 Omega(k)

这是我分析它的方式。

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

  1. 为什么需要使用最佳情况和最坏情况,Big-O 和 Omega 不被视为算法可以执行的最佳和最坏情况吗?
  2. 他的分析是 最坏情况:Theta(logn + k)
    最佳情况:Theta (k)

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

    假设你不做“最好情况”和“最坏情况”,那你怎么分析算法呢?我的分析对吗?

【问题讨论】:

标签: algorithm complexity-theory big-o binary-search


【解决方案1】:

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

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

  • Ω 描述了 下界: f(n) ∈ Ω(g(n)) 表示 f(n) 不小于 g(nk 对于一些正k ,所以 f(n) 总是至少和 g(nk一样多。李>
  • Ο 描述了上界: f(n) ∈ Ο(g(n)) 表示 f(n) 不超过 g(nk 对于一些正k ,所以 f(n) 总是最多为 g(nk。李>

这两个可以应用于二分搜索的最佳情况和最坏情况:

  • 最佳情况:您查看的第一个元素就是您要查找的元素
    • Ω(1):您需要至少一次查找
    • Ο(1):您最多需要一次查找
  • 最坏的情况:元素不存在
    • Ω(log n):你需要至少记录n个步骤,直到你可以说你正在寻找的元素不是呈现
    • Ο(log n):你需要至多记录n个步骤,直到你可以说你正在寻找的元素不是呈现

你看,Ω 和 Ο 值是相同的。在这种情况下,您可以说 紧密界限 最好的情况是 Θ(1),最坏的情况是 Θ(log n)。

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

假设你不做“最好情况”和“最坏情况”,那你如何分析算法?我的分析对吗?

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

【讨论】:

    【解决方案2】:

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

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

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-26
      • 1970-01-01
      • 2012-08-19
      相关资源
      最近更新 更多