定义及作用
在一般开发中,时间复杂度就是用来估算出程序运行的答题时间。这样我们就能知道哪种方法效率更好,可能对于小样本来说都差不太多,但是数据量一大,如量级变成了千万、亿,消耗的时间差距就非常可怕了。
一般假设算法的问题规模为n,那么操作单元数量便用函数f(n)来表示,随着数据规模n的增大,算法执行时间的增长率和f(n)的增长率相同,这称作为算法的渐近时间复杂度,简称时间复杂度,记为 O(f(n))。其中,大O用来表示上界的,即当用它作为算法的最坏情况运行时间的上界,就是对任意数据输入的运行时间的上界。还要注意的是,一般我们讨论算法的实现以及性能的时候,要记住数据用例的不一样,时间复杂度也是不同的。比如快排算法,在数据量较小的时候,效率反而还不如一般的排序算法。
判断简单的时间复杂度大小及复杂情况化简
对于简单的情况,复杂度大小如下:
O(1)常数阶 < O(logn)对数阶 < O(n)线性阶 < O(n^2)平方阶 < O(n^3)(立方阶) < O(2^n) (指数阶)
但很多时候,真实的复杂度并不会如此简单,如:
O(3*n^3 + 20*n + 1000)
这时候就要开始进行化简
O(3*n^3 + 20*n) //首先去掉常数项
O(n^3 + n) //然后去掉所有的系数
O(n^3) //在数量级足够大的情况下,可以去掉低次项
所以这里的时间复杂度就是O(n^3)