先说下O(f(n))、Θ(f(n))、Ω(f(n))的用法,T(n)=O(f(n))实际上指的是T(n)∈O(f(n)),这点上Θ(f(n))、Ω(f(n)同理。
O(f(n))描述的是数量级别与f(n)同阶或者比f(n)更低阶,比如一个T(n)=n那么它既可以写成T(n)∈O(n)也可以写成T(n)∈O(n^2)。所以O(f(n))是一个上界的概念。
Θ(f(n))描述的数量级别与f(n)同阶,比如一个T(n)=n那么它就可以写成T(n)∈O(n)。所以说Θ(f(n))是一个紧确界(就是等阶)的概念。
Ω(f(n))描述的是数量级别与f(n)同阶或者比f(n)更高阶,比如一个T(n)=n那么它既可以写成T(n)∈Ω(n)也可以写成T(n)∈Ω(1)。所以说Ω(f(n))是一个下界的概念。
现在之所以描述算法的最坏情况、最好情况、平均情况的时间复杂度都用的是O(f(n)),一方面是Θ(f(n))符号出现的比较晚是在O(f(n))被滥用后,Kauth发现这种情况之后才推出的Θ(f(n))。另一方面就是我们更关注一个算法的在某种情况下运行时间的上界,如果这个上界同时是紧确界就更好了(实际上这个时候使用的O(f(n))准确的说应该被换成Θ(f(n)),属于O(f(n))的滥用),不是也关系不大(如希尔排序的复杂度就指的不是Θ(f(n)))。
所以这就是为什么使用的都是O(f(n)),这是一种滥用,其实大部分O(f(n))指的都是Θ(f(n)),少部分情况如希尔排序才例外,O指的是真正的O(f(n))
所以在描述一个算法最坏情况或者最好情况下的时间复杂度,其实指的就是在这种最坏最好平均情况下所花费时间的紧确界或者上界,首选紧确界,无法确定紧确界时才使用的上界(如希尔),但符号都统一滥用成O(f(n))。ps:注意最坏情况最好情况与上界下界是两个独立的概念。
如何理解算法时间复杂度的表示法O(n²)、O(n)、O(1)、O(nlogn)等?主要看罗宸、冒泡、梦回琼华的回答
算法导论------渐近记号Θ、Ο、o、Ω、ω详解
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。