dangdangA

导航

时间复杂度的简单理解版本,非专业~~

一.引入时间复杂度

通俗易懂的来说,时间复杂度是这样的

时间复杂度 = 基本运算步骤数量  ×  每步运行所需要的时间


那么,基本运算步骤数量是什么呢??本噹来举一个简单的例子哈:

1 for i in range(n):
2     print(n)

上述代码我们得循环n遍,此处的n指的就是基本运算步骤的数量;

其次,每步运行所需要的时间又是什么??

这个我们依据物理机的不同,参考度不同,一般情况下通常会忽略每步所需运行的时间。

经过上述分析,此时的时间复杂度长这样:

时间复杂度 = 基本运算步骤数量

时间复杂度可以分为:最优时间复杂度,最坏时间复杂度,平均时间复杂度。

二.时间复杂度O(n)的概念

相信大家都接触过高阶无穷小的概念,在这简单说一下哈

定义:当x->x0时,f(x) = 0,g(x)=0,如果当x->0时,f(x)/g(x)=0,那么称f(x)g(x)的高阶无穷小,表示为O(g(x))

 

O(n)这个大O表示的是最坏情况下的时间复杂度(最坏时间复杂度)

举个例子:一共n^3次乘法和n^3次加法,那么加起来就是2×n^3。如果有一个表达式f(n),使得n趋于无穷大的时候,

lim(2×n^3)/f(n) = 常数c

     那么就可以用O(f(n))表示。此处的f(n) 可以是n^3,即O(n^3)

三.时间复杂度的基本规则

1.基本操作:即只有常数项,认为其时间复杂度为O(1)

2.顺序结构:时间复杂度依加法原则进行计算(1+1+1)

 

1 print(a)
2 print(b)
3 print(c)

 

3.循环结构:时间复杂度依乘法原则进行计算(O(n*m))

 

1 for i in range(n):
2     for j in range(m):
3         print(100)

 

4.分支结构:时间复杂度取最大值(O(max(n,m))

1 if i > 0:
2     for j in range(n):
3         print(j)
4 else:
5     for z in range(m):
6         print(m)

5.判断一个算法的效率时,往往只需关注操作数量的最高次项,其它次要项和常数项均可忽略

执行次数函数举例 非正式术语
12 O(1) 常数阶
2n+3 O(n) 线性阶
3n2+2n+1
O(n2) 平方阶
6log2n+23 O(logn) 对数阶
4n+3nlog2n+13 O(nlogn) nlogn阶
6n3+2n2+3n+1 O(n3) 立方阶
2n
O(2n) 指数阶

 

 6.常见时间复杂度之间的关系

所消耗的时间从小到大:

O(1) < O(logn) < O(n) < O(nlogn) < O(n2) < O(n3) < O(2n) < O(n!) < O(nn)

 

posted on 2019-12-19 16:34  dangdangA  阅读(386)  评论(0编辑  收藏  举报