高效算法之时间复杂度介绍

  上一篇博客已经给大家介绍了一些算法题,明天刚好是中秋了,这里祝大家中秋快乐。刚好赶上数学建模了,今天就先介绍与衡量算法水平的重要指标时间复杂度吧。在时间充裕情况下会更新5+2。之后还会介绍空间复杂度以及python内置函数的时间复杂度。

 

1.简介

先看一下什么是时间复杂度:

  衡量代码的好坏,包括两个非常重要的指标:

  运行时间占用空间

  代码的绝对执行时间是无法估计的,但可以预估代码的基本执行次数。

2.程序中最常见的四种执行方式有

(1)T(n) = kn,执行次数是线性的。

  可以理解为有一个任务,完成全部要达到n,每k个时间完成任务的1/n,则完成全部任务所需要的时间为kn个时间。

(2)T(n) = klog(a)(N),执行次数是对数的。

  可以理解为有一个任务,完成全部要达到n,每k个时间完成任务的1/a,然后下一个时间完成剩下任务的1/a,依次循环,则完成全部任务所需要的时间为kloa(a)N个时间。

(3)T(n) = k,执行次数是常量的。

  可以理解为有一个任务,完成全部要达到n,则k个时间完成任务的n,也就是需要k个时间完成所有任务,这个是可以得到代码的绝对执行时间的,则完成全部任务所需要的时间为k个时间。

(4)T(n) = 0.5n^2 + 0.5n,执行次数是一个多项式。

  可以理解为有一个任务,完成全部要达到n,完成第一个1要1个时间,完成第二个1要2个时间,就是不断相加,这里简化了,则完成全部任务所需要的时间为0.5n^2 + 0.5n个时间。

(5)时间复杂度

但是上面的不同情况的由于算法不同无法比较,而且有时候根据n的取值比较结果也不同。这时候就有了渐进时间复杂度的概念:

若存在函数 f(n),使得当n趋近于无穷大时,T(n)/ f(n)的极限值为不等于零的常数,则称 f(n)是T(n)的同数量级函数。

记作 T(n)= O(f(n)),称O(f(n)) 为算法的渐进时间复杂度,简称时间复杂度,也被称为大O表示法

(6)时间复杂度的规则

  如果运行时间是常数量级,用常数1表示;

  只保留时间函数中的最高阶项

  如果最高阶项存在,则省去最高阶项前面的系数

  就是当运行时间不是常数时,省去前面的k系数。

  一般常见的时间复杂度的比较为:O(1)< O(logn)< O(n)< O(n^2)

 

posted @ 2019-09-13 00:26  一只帅气的IT小昂  阅读(688)  评论(0编辑  收藏  举报