复杂度分析当中的Θ、Ο、Ω

Nginx反向者
• 阅读 3746

先说下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、Ω、ω详解

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
java 冒泡排序
思路1.将序列当中的左右元素,依次比较,保证右边的元素始终大于左边的元素;(第一轮结束后,序列最后一个元素一定是当前序列的最大值;)2.对序列当中剩下的n1个元素再次执行步骤1。3.对于长度为n的序列,一共需要执行n1轮比较时间复杂度最佳情况:T(n)O(n)最差情况:T(n)O(n2)平均情
可莉 可莉
3年前
-r -n -t -n-t
root@localhostadvanced_shell_scriptcattest15.sh!/bin/bash!/bin/bashechoe默认情况下,echo命令只显示可打印文本字符。在创建菜单项时,非可打印字符通常也很有用,比如制表符和换行符。要在echo命令中包含这些字符,必
Stella981 Stella981
3年前
-r -n -t -n-t
root@localhostadvanced_shell_scriptcattest15.sh!/bin/bash!/bin/bashechoe默认情况下,echo命令只显示可打印文本字符。在创建菜单项时,非可打印字符通常也很有用,比如制表符和换行符。要在echo命令中包含这些字符,必
Wesley13 Wesley13
3年前
Java生成8位随机邀请码,不重复
publicstaticStringcharsnewString{"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s",
Caomeinico Caomeinico
3年前
[C语言] 浮点型存储
浮点型存储方式按照IEEE754规定储存浮点型数据includeintmain()intn9;//原码反码补码//00000000000000000000000000001010floatpFloat(float)&n;printf("n%d\n",n);printf("pFloat%f\n",pFloat);
Stella981 Stella981
3年前
Python——Day1(笔记代码)
print('HelloWorld')"""n1input('请输入用户名:')print(n1)n2input('请输入密码:')print(n2)""""""n1"alex"n2"root"print(n1'\\t'n2)print(n2)""""""
Stella981 Stella981
3年前
HDOJ1021题 Fibonacci Again 应用求模公式
ProblemDescriptionThereareanotherkindofFibonaccinumbers:F(0)7,F(1)11,F(n)F(n1)F(n2)(n2).InputInputconsistsofasequenceoflines,eachcontaini
Stella981 Stella981
3年前
HDU1005 Number Sequence
HDU1005NumberSequence(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Facm.hdu.edu.cn%2Fshowproblem.php%3Fpid%3D1005)对于公式f\n\A\f\n1\B\f\n2\,因为对于f\n1\
Wesley13 Wesley13
3年前
N
有标号为1到n的n个龙珠,分别放在对应标号为1到n的n个城市里。下面有两种操作:TAB表示把A龙珠所在城市的所有龙珠都转移到B龙珠所在的城市中QA表示查询A,需要知道A龙珠现在所在的城市,A所在的城市有几颗龙珠,A转移到这个城市移动了多少次,分别输出3个整数,表示上述信息。前两个用普通并查集就能算出来,移动
菜园前端 菜园前端
2年前
什么是时间复杂度?
原文链接:什么是时间复杂度?定性描述该算法的运行时间,一个函数、用大O表示,例如O(1)、O(n)、O(logN)...常见的时间复杂度量级常数阶O(1)对数阶O(logN)线性阶O(n)线性对数阶O(nlogN)平方阶O(n²)立方阶O(n)K次方阶O(
贾蔷 贾蔷
1个月前
洛谷P1255题 解题思路和步骤 C++实现带注释,c++入门基础题
一、问题描述与递推关系建立洛谷P1255数楼梯问题要求计算n级台阶的不同走法数,每次可以跨1级或2级。这本质上是斐波那契数列的变种问题,递推公式为f(n)f(n1)f(n2)。当n≤50时可用普通整型存储,但题目中n可能达到5000,这就必须使用高精度运