我正在研究书中的渐近符号,我无法理解作者的意思。我知道if f(n) = Θ(n^2) then f(n) = O(n^2)
。但是,我从作者的话来理解插入排序函数算法f(n) = Θ(n)
和f(n)=O(n^2)
。
为什么呢?大欧米茄或大theta是否随着不同的投入而变化?
他说:
“在插入排序的最坏情况运行时间上绑定的Θ(n ^ 2)并不意味着在每个输入上插入排序的运行时间上绑定Θ(n ^ 2)。” p>
然而,对于大哦符号来说它是不同的。他什么意思?他们之间有什么区别?
我很困惑。我将其复制粘贴在下面:
由于O-notation描述了一个上限,当我们用它来约束最坏情况下的运行时 算法的时间,我们在每个输入上都有一个算法运行时间的界限。 因此,插入排序的最坏情况运行时间的O(n ^ 2)也适用于其运行 每次投入的时间。 Θ(n ^ 2)绑定在插入排序的最坏情况运行时间, 但是,并不意味着在每个输入上插入排序的运行时间上绑定Θ(n ^ 2)。 例如,当输入已经排序时,插入排序运行 Θ(n)时间。
答案 0 :(得分:3)
大omega或大theta是否随着不同的输入而改变?
是。举一个更简单的例子,考虑从左到右的数组中的线性搜索。在最差和平均情况下,此算法采用f( n )= a × n / 2 + b 某些常量的预期步骤 a 和 b 。但是当保证左侧元素始终保持您正在寻找的键时,它总是需要一个 + b 步骤。
由于Θ表示严格的界限,而Θ( n )!=Θ( n ²),因此两种输入的Θ不同
编辑:至于Θ和big-O在同一输入上是不同的,是的,这是完全可能的。考虑以下(不可否认的微不足道)的例子。
当我们将 n 设置为5时, n = 5且 n < 6都是真的。但是当我们将 n 设置为1时, n = 5是假的,而 n < 6仍然是真的。
同样,big-O只是一个上限,就像<在数字上,而Θ是一个严格的约束,如=。
(实际上,对于常量 a 和<,Θ更像是 a &lt; n &lt; b em> b ,即它定义了类似于一系列数字的东西,但原理是相同的。)
答案 1 :(得分:0)
参见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
时间复杂度,但是当最佳案例和平均案例进入问责制时,时间复杂度会根据这些情况而有所不同。
答案 2 :(得分:-1)
我们对每个输入的算法运行时间有一定的限制
这意味着如果有一组输入具有运行时间n^2
而其他输入具有较少的输入,则算法为O(n^2)
。
Θ(n ^ 2)限制了插入排序的最坏情况运行时间, 然而,并不意味着Θ(n ^ 2)在运行时间上受到约束 在每个输入上插入排序
他说反过来不对。如果算法是O(n^2)
,则并不意味着每个输入都将以二次时间运行。
答案 3 :(得分:-3)
关于插入排序算法的学术理论在过去很遥远,但是从我在复制粘贴中的理解:
big-O表示法总是描述最坏的情况,但是big-Theta描述了典型数据的某种平均值。