算法复杂度
算法复杂度是指算法在编写成可执行程序后,运行时所需要的资源,资源包括:时间资源和内存资源。
参考:
前言
算法的时间复杂度是在学习 python 的 deque 双端队列了解到的,所以文本主要是了解学习算法中的时间复杂度和空间复杂度。
定义
算法(Algorithm)是指用来操作数据、解决程序问题的一组方法。
衡量算法的优劣,主要通过 时间 和 空间 两个维度衡量。
时间复杂度
在计算机科学中,算法的 时间复杂度(Time complexity) 是一个函数,定性描述该算法的运行时间。这是一个代表算法输入值的字符串的长度的函数。 时间复杂度常用 大 O 符号 表示,不包括这个函数的低阶项和首项系数。
在编程的过程中,不同的数据代表着不同的作用,并且执行的效率也不同。
大 O 表示法
大 O 符号,又被称为 渐进 符号,用于描述函数渐进行为的数学符号。更确切地说,是用另一个函数来描述一个函数常量级的渐进上界。使用这种方式时, 时间复杂度可被称为渐进的,亦即考察输入值大小趋近无穷时的情况。
下图为常见的时间复杂度关系:

是用来度量算法的运行时间,记作 T(n)=O(f(n))。表示随着输入 n 的增大,算法所需要执行的时间的增长
速度可以用 f(n) 来表示,
常见时间复杂度列表
| 名称 | 复杂度类 | 运行时间 (T(n)) | 运行时间举例 | 算法举例 |
|---|---|---|---|---|
| 常数时间 | O(1) | 10 | 判断一个二进制数的奇偶 | |
| 反阿克曼时间 | O(α(n)) | 并查集的单个操作的平均时间 | ||
| 迭代对数时间 | O(log*n) | 分布式圆环着色问题 | ||
| 对数对数时间 | O(log log n) | 有界优先队列的单个操作 | ||
| 常数时间 | O(1) | 10 | 判断一个二进制数的奇偶 | |
| 常数时间 | O(1) | 10 | 判断一个二进制数的奇偶 | |
| 常数时间 | O(1) | 10 | 判断一个二进制数的奇偶 | |
| 常数时间 | O(1) | 10 | 判断一个二进制数的奇偶 | |
| 常数时间 | O(1) | 10 | 判断一个二进制数的奇偶 | |
| 常数时间 | O(1) | 10 | 判断一个二进制数的奇偶 |
线性对数阶 O(nlogN)
线性对数阶,将时间复杂度为 O(logn) 的代码循环 N 遍的时间复杂度就是 n * O(logN),也就是 O(nlogN)
1 | for ((m=1; m<n; m++)); do |
1 | m = 1 |
平方阶 O(n²)
平方阶将 O(n) 的代码再嵌套循环一遍,它的时间复杂度就是 O(n²)
1 | for ((x=1; i<n; x++)); do |
1 | x = 1 |
空间复杂度
空间复杂度(Space Complexity)是对一个算法在运行中临时占用存储空间的一个度量,同时反映的是一个趋势。用 S(n) 来定义。
常见的空间复杂度有: O(1) O(n) O(n²)
空间复杂度-O(1)
-
2023-08-24