所谓的时间复杂度就是基本运算数量的总和,在分析算法时,存在三种可能:1.最优时间复杂度:算法完成工作最少需要多少基本操作;
2.最坏时间复杂度:算法完成工作最多需要多少基本操作;
3.平均时间复杂度:算法完成工作平均需要多少基本操作;
我们主要关注的是最坏时间复杂度。
时间复杂度的几条基本计算规则:
基本操作 | 赋值,打印等此类操作,时间复杂度为O(1) |
---|---|
顺序结构 | 时间复杂度相加 |
循环结构 | 时间复杂度相乘 |
分支结构 | 选择分支中最大的时间复杂度 |
注意:判断一个算法的效率时,往往关注操作数量的最高次项,其它次要项和常数项可忽略,此外,在没有特殊说明时,往往研究最坏时间复杂度。
常见时间复杂度:
执行次数 | 时间复杂度 | 名称 | 举例 |
---|---|---|---|
21 | O(1) | 常数阶 | 赋值、打印等 |
2*n+10 | O(n) | 线性阶 | 顺序查找 |
n^2+2*n+10 | O(n^2) | 平方阶 | 两重循环 |
n^3+2*n+1 | O(n^3) | 立方阶 | 三重循环 |
5*log(n)+n^2 | O(log(n)) | 对数阶 | 二分查找 |
n*log(n)+n^2 | O(n*log(n)) | 对数线性阶 | 堆排序法 |
2^n | O(2^n) | 指数阶 | 斐波那契数列 |
3*n^n+1 | O(n^n) | n次方阶 | n重循环 |
n! | O(n!) | 阶乘 | 旅行商 |
常见时间复杂度按所消耗的时间从小到大排序:
当n>=65时,O(n!)>O(n^n)
import numpy as np
import math
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot()
ax.set(xlim=[0,65], ylim=[0,100], title=