【问题标题】:Asymptotic Notation for algorithms算法的渐近符号
【发布时间】:2024-05-22 13:35:01
【问题描述】:

我终于明白了,当函数f(n) 被夹在同一个类的下限和上限之间时,这意味着什么,因此可以描述为 theta(n)。 p>

举个例子:

f(n) = 2n + 3

1n <= 2n + 3 <= 5n for all values of n >= 1

在上面的例子中,n 的顺序在两边,所以f(n) 夹在1 * g(n)5 * g(n) 之间。

当我尝试不使用符号来考虑最佳或最坏情况时,它也更加清晰,而是作为上限、下限或平均界限。

所以现在我想我终于理解了这个和它周围的数学,我回去访问这个页面:https://www.bigocheatsheet.com/ 查看各种搜索函数的运行时间,突然又对那里有多少算法感到困惑,因为例如冒泡排序,两边(上下界)的顺序不同,但使用 theta 来描述它们。

冒泡排序有Ω(n)O(n^2),但theta 值是Θ(n^2)。如果函数的上限是N^2的顺序,而函数的下限是n的顺序,它怎么能有Θ(n^2)

【问题讨论】:

    标签: big-o complexity-theory


    【解决方案1】:

    实际上,您所引用的页面具有高度误导性 - 即使并非完全错误。如果您分析算法的复杂性,您首先必须指定场景:即您是在谈论最坏情况(默认情况)、平均情况还是最佳情况。对于这三个场景中的每一个,您都可以给出一个下界 (Ω)、上界 (O) 或一个紧界 (Θ)。

    以插入排序为例。虽然页面严格来说是正确的,因为最好的情况是 Ω(n),但它也可以(更准确地说)说最好的情况是 Θ(n)。同样,最坏的情况确实是该页面上所述的 O(n²)(以及 Ω(n²) 或 Ω(n) 或 O(n³)),但更准确地说是 Θ(n²)。

    不幸的是,使用 Ω 总是表示最好的情况,而使用 O 总是表示最坏的情况,这是一个经常犯的错误。外卖信息:情景(最差、平均、最佳)和界限的类型(上限、下限、紧)是两个独立的维度。

    【讨论】:

    • 在您的示例中,您可以说它永远不会以低于Ω(n) 的速度增长,但是因为Ω(n²) 更高,我们怎么能说它不会以低于Ω(n²) 的速度增长如果@ 987654324@ 还不到那个?当谈到 Big O 时,我明白了,因为如果它的上限为 O(n^2),它的上限也可能为 O(n³)。我只是不明白欧米茄的例子,大 O 说我的车不会超过 120 英里/小时,同样它永远不会超过 300 英里或 500 英里/小时,但都没有 120 英里/小时有用,我怎么理解你的欧米茄示例?
    • 情况正好相反(我们谈论的是最坏的情况)。如果 Ω(n²) 是函数的下界,则 Ω(n) 也必须是函数的下界。
    • @berimbolo 在您的汽车示例中与 Omega 类似的是,汽车的速度不会慢于 120mph。对于 Theta 来说,这将是:汽车的速度不会超过 120 英里/小时,也不会低于 120 英里/小时。但是您首先必须定义场景,即我们谈论的是汽车的最低、平均还是最高速度?
    • 在每个部分下的算法页面上,使用 theta 将任何情况描述为准确会更正确吗?我想我知道该页面的作者只是错误地使用了符号来描述场景,所以那不是正确的符号吗?
    • @berimbolo 是的,没错。他们应该在任何地方都使用Θ。相反,他们隐含地使用 Ω、Θ、O 分别表示最佳、平均和最差情况,这是错误的。