算法时间复杂度,大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()

 

下面的内容摘自知乎:什么是最好、最坏、平均、均摊时间复杂度?

 

posted @ 2020-10-18 16:52  Picassooo  阅读(660)  评论(0编辑  收藏  举报