算法复杂度
大 O 表示法
它用于描述算法的性能和复杂程度。大 O 表示法将算法按照消耗的时间进行分类,依据随输入增大所需要的空间/内存。
如何衡量算法的效率?通常是用资源,例如 CPU(时间)占用、内存占用、硬盘占用和网 络占用。当讨论大 O 表示法时,一般考虑的是 CPU(时间)占用。所以资源包括时间资源和内存资源。
分析算法时,时常遇到以下几类函数。
| 符号 | 名称 |
|---|---|
| O(1) | 常数的 |
| O(log(n)) | 对数的 |
| O((log(n))c) | 对数多项式的 |
| O(n) | 线性的 |
| O(n2) | 二次的 |
| O(nc) | 多项式的 |
| O(cn) | 指数的 |
时间复杂度比较
| 输入大小(n) | O(1) | O(log(n)) | O(n) | O(nlog(n)) | O(n2) | O(2n) |
|---|---|---|---|---|---|---|
| 10 | 1 | 1 | 10 | 10 | 100 | 1024 |
| 20 | 1 | 1.30 | 20 | 26.02 | 400 | 1 048 576 |
| 50 | 1 | 1.69 | 50 | 84.94 | 2500 | 非常大 |
| 100 | 1 | 2 | 100 | 200 | 10 000 | 非常大 |
| 500 | 1 | 2.69 | 500 | 1349.48 | 250 000 | 非常大 |
| 1000 | 1 | 3 | 1000 | 3000 | 1 000 000 | 非常大 |
| 10 000 | 1 | 4 | 10 000 | 40 000 | 100 000 000 | 非常大 |
可以基于上表信息画一个图来表示不同的大 O 表示法的消耗。

下面为常用算法和数据结构的时间复杂度:
1. 数据结构
下表是常用数据结构的时间复杂度:

2. 图
下表是图的时间复杂度。

3. 排序算法
下表是排序算法的时间复杂度。

4. 搜索算法
下表是搜索算法的时间复杂度:
