CSP 2022 备战 时间复杂度

如果我们要对一个程序进行评级,可以通过什么?
最显著的,自然是通过测试点评价
其次,就是通过时间复杂度与空间复杂度来评级了
由于空间一般是十分充足的,UKE的报错情况少之又少
所以这里只对时间复杂度进行讨论
时间复杂度,代表一个程序运行的时间,表达方式是O() 常见的有O(n),O(nlogn),O(n2)等
最直观的,可以通过数学推导的方式得到时间复杂度
常见的时间复杂度复杂度可以分为四种类型:
1.线性时间复杂度
写作T(n)=xn,T是一个一次函数,诸如2n,3n等等
这类时间复杂度用O表示时略去系数,记作O(n)
2.对数时间复杂度
写作T(n)=xlogn,以对数的形式存在
这类时间复杂度用O表示时略去系数,记作O(logn)
3.常量时间复杂度
这个是比较少见的,即无论执行何种操作,计算量始终保持不变
写作T(n)=x
记作O(1)
4.多项式时间复杂度
这个是比较多见得,见于有循环的程序
其中O的取值为n的指数最大的一项
记作O(n^x)
如P5475
假设n=4,考虑i和j是枚举所有子区间,当i=1时,子区间长度为1,2,3,4,i=2,长度为1,2,3,i=3子区间长度为1,2,i=4,子区间长度为1
所以T(n)=(1+2+3+4)+(1+2+3)+(1+2)+(1)
化简的结果是1/6(n^3 + 3n^2+2n)
O取其中的最大指数,所以记作O(n^3)
待补充:
https://blog.csdn.net/qq_41523096/article/details/82142747

posted @ 2022-09-27 22:12  美索maysoul  阅读(128)  评论(4)    收藏  举报