上一篇文章《算法是什么》中提到,解决同一个问题,可能会有多种算法,但程序的好坏,一般用复杂度来衡量。本文介绍算法中的两个基本衡量标准:时间复杂度、空间复杂度。
时间复杂度
时间复杂度,是用来评估算法运行效率的一个式子。一般来说,时间复杂度高的算法,比复杂度低的算法慢。一般记作O(x),O后面的内容,可以理解为是一个单位。类比生活中的:分钟、小时、天。
常见的时间复杂度(按效率排序):
O(1) < O(log(n)) < O(n) < O(nlog(n)) < O(n^2) < O(n^2log(n)) < O(n^3)
复杂问题的时间复杂度:
O(n!) O(2^n) O(n^n)
常见时间复杂度示例
# O(1) print('Hello World') # O(n) for i in range(n): print('Hello World') # O(n^2) for i in range(n): for j in range(n): print('Hello World') # O(log(n)) 或者O(log(n)) while n>1: print(n) n = n // 2 例如:n=64 输出:64 32 16 8 4 2 2的6次方=64 log2(64) = 6
判断时间复杂度步骤:
1) 确定问题规模n
2) 循环减半过程 log(n)
3) k层关于n的循环 n^k
空间复杂度
空间复杂度,是用来评估算法内存占用大小的式子,空间复杂度表示方法和时间复杂度完全一样。
判断方法:
1) 算法使用了几个变量:O(1)
2) 算法使用了长度为n的一维列表:O(n)
3) 算法使用了m行n列的二维列表:O(m*n)
多数场景中,挑选 "好" 算法往往更注重的是时间复杂度,空间复杂度只要处于一个合理的范围即可。
本文为 陈华 原创,欢迎转载,但请注明出处:http://ichenhua.cn/read/72
- 下一篇:
- 递归算法和斐波拉契数列