跳到主要内容

算法复杂度

大 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)
101110101001024
2011.302026.024001 048 576
5011.695084.942500非常大
1001210020010 000非常大
50012.695001349.48250 000非常大
100013100030001 000 000非常大
10 0001410 00040 000100 000 000非常大

可以基于上表信息画一个图来表示不同的大 O 表示法的消耗。

大 O 表示法的消耗

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

1. 数据结构

下表是常用数据结构的时间复杂度:

数据结构时间复杂度

2. 图

下表是图的时间复杂度。

图时间复杂度

3. 排序算法

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

排序算法时间复杂度

4. 搜索算法

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

搜索算法时间复杂度