常见的时间复杂度如表2-10-1所示。
执行次数 | 函数阶 | 非正式术语常数阶 |
---|---|---|
1 | O(1) | 常数阶 |
2n + 3 | O(n) | 线性阶 |
3n2 + 2n + 1 | O(n 2 ) | 平方阶 |
5log2 n+ 20 | O(logn) | 对数阶 |
2n+3nlog 2 n+19 | O(nlogn) | nlogn 阶 |
6n 3 +2n 2 +3n+4 | O(n 3 ) | 立方阶 |
2 n | O(2 n ) | 指数阶 |
常用的时间复杂度所耗费的时间从小到大依次是:
O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n3)<O(2n)<O(n!)<O(nn)
前面已经谈到了O(1)常数阶、O(logn)对数阶、O(n)线性阶、O(n²)平方阶等,至于O(nlogn)我们将会在今后的课程中介绍,而像O(n³),过大的n都会使得结果变得不现实。同样指数阶O(2n)和阶乘阶O(n!)等除非是很小的n值,否则哪怕n只是100,都是噩梦般的运行时间。所以这种不切实际的算法时间复杂度,一般我们都不去讨论它。