1. 维基上的定义
在计算机科学中,算法的时间复杂度是一个函数,它定性描述该算法的运行时间。这是一个代表算法输入值的字符串的长度的函数。时间复杂度常用大O符号表述,不包括这个函数的低阶项和首项系数。使用这种方式时,时间复杂度可被称为是渐近的,亦即考察输入值大小趋近无穷时的情况。
2 复杂度分类
- 最坏情况复杂度:(常说的复杂度)定义为任何大小的输入 n 所需的最大执行时间
- 平均情况复杂度:通常有特别指定才会使用
3. 算法归类
- 线性时间算法:T(n) = O(n);
- 指数时间算法:T(n) = O(Mn) 和 Mn= O(T(n)) ,其中 M ≥ n > 1;
4. 常见时间复杂度列表
名称 | 运行时间 T(n) | 算法举例 |
---|---|---|
常数时间 | O(1) | 判断一个二进制数的奇偶 |
对数时间 | O(log n) | 二分搜索 |
线性时间 | O(n) | 无序数组的搜索 |
线性对数时间 | O(nlog n) | 最快的比较排序 |
二次时间 | O(n^2) | 冒泡排序、插入排序 |
常见的算法时间复杂度由小到大依次为:Ο(1)<Ο(logn)<Ο(n)<Ο(nlogn)<Ο(n2)<Ο(n3)<…<Ο(2n)<Ο(n!) 注:尽可能选用多项式阶O(nk)的算法(即P问题)