据我所知和研究,
大-哦符号描述了算法时间复杂度的最坏情况。
Big-Omega 符号描述了算法时间复杂度的最佳情况。
大-Theta 符号描述了算法时间复杂度的平均情况。
但是,最近几天,我看到了一个讨论,其中有些人告诉我们
最糟糕的情况是“可原谅”的误解。 Θ最好是平淡的 错误。最好的Ω也是可以原谅的。但是它们仍然是误解。big-O表示法可以表示任何复杂性。实际上可以 描述任何函数的渐近行为。
我还记得我在大学课程中学习了前者。我仍然是学生,如果我对他们的认识有误,请您能解释一下吗?
答案 0 :(得分:2)
Bachmann-Landau表示法与算法的计算复杂度完全无关。通过巴赫曼(Bachmann)和朗道(Landau)于1894年发明这种表示法的时候,并不真正存在一种用于计算算法的计算机器的想法,这一点就已经很明显了。
Bachmann-Landau表示法将功能的增长率归为一组以大致相同速率增长的功能。 Bachmann-Landau符号没有说明这些功能的含义。它们只是功能。实际上,它们根本不需要任何意义。
它们的全部意思是这样:
它没有说明f或g或它们的含义。
请注意,实际上有两个冲突的,不兼容的Ω定义;此处给出的一个对计算复杂性理论更有用。还要注意,这些只是非常广泛的直觉,如果有疑问,您应该查看一下定义。
如果需要,可以使用巴赫曼-兰道(Bachmann-Landau)表示法来描述作为时间函数的兔子种群的增长率,或者根据啤酒函数来描述人的腹部的增长率。 p>
或者,您可以使用它来描述最佳情况下的步骤复杂度,最坏情况下的步骤复杂度,平均情况下的步骤复杂度,预期情况下的步骤复杂度,摊销的步骤复杂度,最佳情况下的时间复杂度,最坏情况下的时间复杂度,平均情况下的时间复杂度,预期情况下的时间复杂度,摊销时间复杂度,最佳情况下的空间复杂度,最坏情况下的空间复杂度,平均情况下的空间复杂度,预期情况下的空间复杂度或算法的摊余空间复杂性
答案 1 :(得分:1)
这些断言充其量是错误的,充其量是错误的。这是事实。
算法的运行时间不是N的函数(因为N也取决于特定的数据集),因此您不能直接讨论其渐近复杂度。您只能说它介于最佳和最差情况之间。
最坏情况,最佳情况和平均情况下的运行时间是N的函数,尽管平均情况取决于数据的概率分布,所以没有唯一定义。
那么渐近符号就是这样
O(f(N))表示上限,该上限可以严格,也可以不严格;
Ω(f(N))表示下界,该下界可以紧密或不紧密;
Θ(f(N))表示双边边界,即O(f(N))和Ω(f(N))的和;它很紧。
所以
所有最坏情况,最好情况和平均情况下的复杂度都具有Θ界,因为它们是函数。在实践中,这个界限可能太难建立,我们对自己的O或Ω界限感到满意。
为平均情况保留Θ边界是绝对不正确的。
示例:
快速排序的最坏情况是Θ(N²),其最佳和平均情况是Θ(N Log N)。因此,由于语言滥用,快速排序的运行时间为O(N²)和Ω(N Log N)。
插入排序的最坏情况,最好情况和平均情况都是三个Θ(N²)。
任何需要查看所有输入的算法都是最佳情况,平均情况和最坏情况Ω(N)(并且如果没有更多信息,我们将无法确定任何上限)。
众所周知,矩阵乘法在时间O(N³)中是可行的。但是我们仍然不知道该运算的Θ界,它是N²乘以缓慢增长的函数。因此,Ω(N²)是一个明显的下限,但不是很严格。 (最差,最佳和平均情况具有相同的复杂性。)最佳/平均/最坏情况的持续时间明确,而一般情况在一定范围内(实际上是一个随机变量),这引起了一些混淆。另外,算法分析即使不是很棘手,也通常很乏味,我们使用的简化方法可能会导致界限松动。