算法时间复杂度,大O表示法, 最好、最坏、平均时间复杂度
定义
时间复杂度就是用来方便开发者估算出程序的运行时间。
我们该如何估计程序运行时间呢,我们通常会估计算法的操作单元数量,来代表程序消耗的时间, 这里我们默认CPU的每个单元运行消耗的时间都是相同的。
假设算法的问题规模为n,那么操作单元数量便用函数f(n)来表示。
随着数据规模n的增大,算法执行时间的增长率和f(n)的增长率相同,这称作为算法的渐近时间复杂度,简称时间复杂度,记为 O(f(n))。
时间复杂度表示算法的执行时间与数据规模之间的增长关系。
大O表示法只考虑算法时间复杂度的主导部分,即把算法的时间复杂度的低阶项和系数去除的一种表示方法。
复杂度量级
常数阶 O(1)
对数阶 O(logn)
线性阶 O(n)
线性对数阶 O(nlogn)
平方阶 O(n^2),立方复杂度....
指数阶 O(2^n)
阶乘阶 O(n!)
各个时间复杂度量级的图像
程序:
import numpy as np import matplotlib.pyplot as plt x = np.linspace(0.01, 5.01, 100) y = np.zeros(100) plt.plot(x, y, c='black') plt.plot(x, np.log2(x), label='log2(n)') plt.plot(x, x, label='n') plt.plot(x, x*np.log2(x), label='nlog2(n)') plt.plot(x, x**2, label='n^2') plt.plot(x, 2**x, label='2^n') plt.xlim(0.01, 5.01) plt.xticks(np.arange(0.0, 5.0, step=0.5)) plt.legend(loc='best') plt.grid() plt.show()
下面的内容摘自知乎:什么是最好、最坏、平均、均摊时间复杂度?