我们一般都用大O表示法来形容算法(解决某个问题的一套流程)的时间上的快慢。
大O算法一般只关注其所用的步数。 大O解答的是这样的问题:当数据增长时,步数如何变化的问题?
1 常用的大O算法分类:
1.1 常数时间 O(1)
常数时间就是所有数据增长但步数不变;常用O(1)来表示。
1.2 线性时间 O(N)
O(N)称为线性时间,意思是当数组增加一个元素时,O(N)算法就要增加1步。
1.3 对数时间 O(logN)
O(logN)算法的步数等于二分数据直至元素剩余1个的次数。
N个元素 | O(N) | O(logN) |
---|---|---|
8 | 8 | 3 |
16 | 16 | 4 |
32 | 32 | 4 |
64 | 64 | 6 |
128 | 128 | 7 |
256 | 256 | 8 |
1.4 二次问题 O(N^2)
N个元素 | O(N) | O(N^2) |
---|---|---|
4 | 4 | 16 |
5 | 5 | 25 |
6 | 6 | 36 |
7 | 7 | 49 |
8 | 8 | 64 |
9 | 9 | 81 |
2 大O计数忽略常数
大O记法不包含一般数字,除非是指数。
O(2N)简写为O(N) ,O(100N)也简写为O(N)。