【问题标题】:Big theta notation of insertion sort algorithm插入排序算法的大θ符号
【发布时间】:2012-09-30 17:20:56
【问题描述】:

我正在研究书中的渐近符号,我无法理解作者的意思。我知道if f(n) = Θ(n^2) then f(n) = O(n^2)。但是,我从作者的话中了解到对于插入排序函数算法f(n) = Θ(n)f(n)=O(n^2)

为什么?大 omega 或大 theta 是否会随着输入的不同而变化?

他说:

“然而,插入排序最坏情况运行时间的 Θ(n^2) 界限并不意味着每个输入的插入排序运行时间的 Θ(n^2) 界限。”

但是,大哦符号不同。他什么意思?它们有什么区别?

我很困惑。我在下面复制粘贴:

由于 O-notation 描述了一个上限,当我们使用它来限制最坏情况的运行时 算法的时间,我们对每个输入的算法运行时间都有一个界限。 因此,插入排序的最坏情况运行时间的 O(n^2) 界限也适用于它的运行 每个输入的时间。 Θ(n^2) 限制在插入排序的最坏情况运行时间上, 但是,并不意味着 Θ(n^2) 限制在每个输入的插入排序的运行时间上。 例如,当输入已经排序时,插入排序在 Θ(n) 时间。

【问题讨论】:

    标签: algorithm complexity-theory big-o insertion-sort big-theta


    【解决方案1】:

    大 omega 或大 theta 是否会随着输入的不同而变化?

    是的。举一个更简单的例子,考虑从左到右的数组中的线性搜索。在最坏和平均的情况下,这个算法需要 f(n) = a × n/2 + b一些常量 ab 的预期步骤。但是,当保证左元素始终持有您要查找的键时,它总是需要 a + b 步骤。

    由于 Θ 表示严格界限,并且 Θ(n) != Θ(n²),因此两种输入的 Θ 是不同的.

    编辑:至于 Θ 和 big-O 在同一输入上不同,是的,这是完全可能的。考虑以下(诚然微不足道的)示例。

    当我们将 n 设置为 5 时,那么 n = 5 和 n n 设置为 1 时,那么 n = 5 为假,而 n

    同样,big-O 只是一个上限,就像数字上的

    (其实Θ更像是a n b 对于常量a b,即它定义了类似于数字范围的东西,但原理是一样的。)

    【讨论】:

    • 同一个函数同一个输入,big-oh和big-theta有可能不一样吗?
    • 详细来说,Theta(f(n))实际上是O(f(n))Omega(f(n))交集Theta(f(n)) 的所有内容也是 O(f(n)) - 但不是相反。
    • 在大卫给出的链接中,一个人说:“基本上当我们说一个算法是 O(n) 时,它也是 O(n^2), O(n^1000000), O(2^n), ... 但是 Θ(n) 算法不是 Θ(n^2)。”这句话能准确回答我的问题吗? “O(n^2) 适用于每个答案”作者说。即使最好的情况是 f(n)=O(1) ,我们也可以说 f(n)=O(n^2) 因为最坏的情况是 O(n^2)。但是,由于 theta(n) 不是 theta(n^2) ,我们不能对 theta 说同样的话,这与 big-og 表示法不同。我说的对吗?
    • @user1308990:没有。 Θ vs. O 与最佳情况、预期和最坏情况完全无关。你可以说 f(n) = O(1) 即使 f(n) = O(n²) 只是因为 n² > 1 对于每个 n 大于某个常数。
    【解决方案2】:

    请参阅 CLRS 第 3 版 第-44页(渐近符号、函数和运行时间) 它说-

    即使我们使用渐近符号来应用算法的运行时间,we need to understand which running time we mean。有时我们对worst-case 的运行时间感兴趣。 Often, however, we wish to characterize the running time no matter what the input. In other words, we often wish to make a blanket statement that covers all inputs, not just the worst case.

    摘自上述段落:

    • 最坏情况提供算法运行时间的最大限制。 因此,插入排序的最坏情况运行时间的 O(n^2) 界限也适用于其在每个输入上的运行时间。

    • 但是,Theta(n^2) 限制了插入排序的最坏情况运行时间,但并不意味着 Theta(n^2) 限制了每个输入的插入排序的运行时间。 因为插入排序的最佳情况运行时间产生Theta(n)。(当列表已经排序时)

    • 我们通常编写算法的 worst case 时间复杂度,但是当考虑最佳情况和平均情况时,时间复杂度会根据这些情况而有所不同。

    【讨论】:

      【解决方案3】:

      简单来说,程序的运行时间被描述为 其输入大小的函数,即 f(n)。

      = 是不对称的,因此 an+b=O(n) 意味着 f(n) 属于集合 O(g(n))。所以我们也可以说 an+b=O(n^2) 并且它是真的,因为 f(n) 对于 a,b 和 n 的某些值属于集合 O(n^2)。

      因此 Big-Oh(O) 只给出了一个上限,或者您可以说该符号给出了 blanket statement,这意味着给定输入大小的所有输入都被覆盖,而不仅仅是最坏的情况一次。例如,在插入排序的情况下,以相反的顺序对大小为 n 的数组进行排序。

      所以 n=O(n^2) 是正确的,但在定义算法的最坏情况运行时间时会被滥用。在最坏的情况下,运行时间给出了任何输入的运行时间上限。众所周知,在插入排序的情况下,运行时间将取决于输入在固定大小的给定数组中的排序程度。因此,如果数组是排序的,则运行将是线性的。

      所以我们需要一个严格的渐近界符号来描述我们最坏的情况, 这是由 Θ 表示法提供的,因此插入排序的最坏情况是 Θ(n^2),最好情况是 Θ(n)。

      【讨论】:

        【解决方案4】:

        我们对每个输入的算法运行时间都有一个界限

        这意味着如果有一组输入的运行时间为n^2,而其他的运行时间较少,则算法为O(n^2)

        插入排序的最坏情况运行时间的 Θ(n^2) 界限, 但是,并不意味着 Θ(n^2) 受限于运行时间 对每个输入进行插入排序

        他是说反之亦然。如果一个算法是O(n^2),这并不意味着每个输入都会以二次时间运行。

        【讨论】:

        • Big-O 与您所暗示的“最坏情况”不同。如果有一组输入的运行时间为 n^2,而其他输入的运行时间较短,则算法采用 O(n^2) 和 Theta(n^2)在最坏的情况下。只说“算法是 O(n^2)”是没有意义的。
        • 在最坏的情况下它 Theta(n^2)。如果您正在查看最坏的情况而不是其他情况,则不是一个因素。甚至 OP 从书中引用的部分也给出了这种情况的例子。
        • “最坏情况下的 Theta(n^2)”意味着在最坏情况下任何输入的复杂度都是二次的,不多也不少。
        • 请记住,用我的话来说,我从来没有谈论过最坏情况、平均情况或最佳情况,我谈论的是运行时间。所以我不会把 Big-O 和更坏的情况混在一起。
        【解决方案5】:

        我关于插入排序算法的学术理论在过去很遥远,但从我对你的复制粘贴的理解来看:

        big-O 表示法总是描述最坏的情况,但 big-Theta 描述的是典型数据的某种平均值。

        看看这个:What is the difference between Θ(n) and O(n)?

        【讨论】:

        • 不,那不是 Θ 和 big-O 的意思。 Θ 是一个严格的界限,O 是一个上限。两者都可以应用于平均、最坏情况、最佳情况或摊销分析。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-17
        • 2019-04-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多