定义:如果一个问题的规模是n,解这一问题的某一算法所需要的时间为T(n),它是n的某一函数 T(n)称为这一算法的“时间复杂性”。

当输入量n逐渐加大时,时间复杂性的极限情形称为算法的“渐近时间复杂性”。

我们常用大O表示法表示时间复杂性,注意它是某一个算法的时间复杂性。大O表示只是说有上界,由定义如果f(n)=O(n),那显然成立f(n)=O(n^2),它给你一个上界,但并不是上确界,但人们在表示的时候一般都习惯表示前者。

此外,一个问题本身也有它的复杂性,如果某个算法的复杂性到达了这个问题复杂性的下界,那就称这样的算法是最佳算法。

“大O记法”:在这种描述中使用的基本参数是 n,即问题实例的规模,把复杂性或运行时间表达为n的函数。这里的“O”表示量级 (order),比如说“二分检索是 O(logn)的”,也就是说它需要“通过logn量级的步骤去检索一个规模为n的数组”记法 O ( f(n) )表示当 n增大时,运行时间至多将以正比于 f(n)的速度增长。

这种渐进估计对算法的理论分析和大致比较是非常有价值的,但在实践中细节也可能造成差异。例如,一个低附加代价的O(n2)算法在n较小的情况下可能比一个高附加代价的 O(nlogn)算法运行得更快。当然,随着n足够大以后,具有较慢上升函数的算法必然工作得更快。

O(1)

Temp=i;i=j;j=temp;

以上三条单个语句的频度均为1,该程序段的执行时间是一个与问题规模n无关的常数。算法的时间复杂度为常数阶,记作T(n)=O(1)。如果算法的执行时 间不随着问题规模n的增加而增长,即使算法中有上千条语句,其执行时间也不过是一个较大的常数。此类算法的时间复杂度是O(1)。

O(n^2)

2.1. 交换i和j的内容

sum=0;                 (一次)

for(i=1;i<=n;i++)       (n次 )

for(j=1;j<=n;j++) (n^2次 )

sum++;       (n^2次 )

解:T(n)=2n^2+n+1 =O(n^2)

2.2.

for (i=1;i<n;i++)

{

y=y+1;         ①

for (j=0;j<=(2*n);j++)

x++;        ②

}

解: 语句1的频度是n-1

语句2的频度是(n-1)*(2n+1)=2n^2-n-1

f(n)=2n^2-n-1+(n-1)=2n^2-2

该程序的时间复杂度T(n)=O(n^2).

O(n)

2.3.

a=0;

b=1;                      ①

for (i=1;i<=n;i++) ②

{

s=a+b;    ③

b=a;     ④

a=s;     ⑤

}

解: 语句1的频度:2,

语句2的频度: n,

语句3的频度: n-1,

语句4的频度:n-1,

语句5的频度:n-1,

T(n)=2+n+3(n-1)=4n-1=O(n).

O(log2n )(对数^_^)

2.4.

i=1;       ①

while (i<=n)

i=i*2; ②

解: 语句1的频度是1,

设语句2的频度是f(n),   则:2^f(n)<=n;f(n)<=log2n

取最大值f(n)= log2n,

T(n)=O(log2n )

O(n^3)

2.5.

for(i=0;i<n;i++)

{

for(j=0;j<i;j++)

{

for(k=0;k<j;k++)

x=x+2;

}

}

解:当i=m, j=k的时候,内层循环的次数为k当i=m时, j 可以取 0,1,...,m-1 , 所以这里最内循环共进行了0+1+...+m-1=(m-1)m/2次所以,i从0取到n, 则循环共进行了: 0+(1-1)*1/2+...+(n-1)n/2=n(n+1)(n-1)/6所以时间复杂度为O(n^3).

我们还应该区分算法的最坏情况的行为和期望行为。如快速排序的最 坏情况运行时间是 O(n^2),但期望时间是 O(nlogn)。通过每次都仔细 地选择基准值,我们有可能把平方情况 (即O(n^2)情况)的概率减小到几乎等于 0。在实际中,精心实现的快速排序一般都能以 (O(nlogn)时间运行。

下面是一些常用的记法:

访问数组中的元素是常数时间操作,或说O(1)操作。一个算法如 果能在每个步骤去掉一半数据元素,如二分检索,通常它就取 O(logn)时间。用strcmp比较两个具有n个字符的串需要O(n)时间 。常规的矩阵乘算法是O(n^3),因为算出每个元素都需要将n对 元素相乘并加到一起,所有元素的个数是n^2。

指数时间算法通常来源于需要求出所有可能结果。例如,n个元 素的集合共有2n个子集,所以要求出所有子集的算法将是O(2n)的 。指数算法一般说来是太复杂了,除非n的值非常小,因为,在 这个问题中增加一个元素就导致运行时间加倍。不幸的是,确实有许多问题 (如著名 的“巡回售货员问题” ),到目前为止找到的算法都是指数的。如果我们真的遇到这种情况, 通常应该用寻找近似最佳结果的算法替代之。

文章摘自:http://hi.baidu.com/www_cql/blog/item/457ceeec3bf28b2363d09fee.html

算法的时间复杂度[ZT]相关推荐

  1. a*算法的时间复杂度_算法基础——时间复杂度amp;空间复杂度

    关注.星标公众号,学点计算机知识. 整理:persistenceBin 今天来跟大家继续分享一下数据结构的基础知识--算法效率的度量:时间复杂度和空间复杂度.首先来跟大家分享一下在电影<复仇者联 ...

  2. a*算法的时间复杂度_从经典算法题看时间复杂度

    本文首发公众号:架构精进​,排版比较清晰. 经常有同学在 LeetCode 的题解中问解法的复杂度是多少.作为一个懒人,我一直在「逃避」这个问题,毕竟这东西听起来就这么「复杂」. 但本着对题解认真负责 ...

  3. 【转】算法中时间复杂度概括——o(1)、o(n)、o(logn)、o(nlogn)

    2019独角兽企业重金招聘Python工程师标准>>> 在描述算法复杂度时,经常用到o(1), o(n), o(logn), o(nlogn)来表示对应算法的时间复杂度.这里进行归纳 ...

  4. 常用的排序算法的时间复杂度和空间复杂度

    常用的排序算法的时间复杂度和空间复杂度                                           1.时间复杂度 (1)时间频度 一个算法执行所耗费的时间,从理论上是不能算出 ...

  5. 【计算理论】计算复杂性 ( 小 O 记号 | 严格渐进上界 | 分析算法的时间复杂度 )

    文章目录 一.小 O 记号 ( 严格渐进上界 ) 二.分析算法的时间复杂度 一.小 O 记号 ( 严格渐进上界 ) 如果 g(n)\rm g(n)g(n) 是 f(n)\rm f(n)f(n) 渐进上 ...

  6. 关于算法的时间复杂度和空间复杂度的总结

    一.算法的概念   算法(Algorithm)是将一组输入转化为一组输出的一系列计算步骤,其中每个步骤必须能在有限时间内完成.算法是用来解决一类计算问题的,注意是一类问题,而不是一个特定的问题. 二. ...

  7. 简单分析算法的时间复杂度

    目录 一.什么是算法的时间复杂度 二.如何分析一个算法的时间复杂度 1.有确定次数的算法 2.次数不确定的算法 一.什么是算法的时间复杂度         时间复杂度是一个函数 ,定性描述一个算法(程 ...

  8. 【算法的时间复杂度和空间复杂度】-算法02

    算法的时间复杂度和空间复杂度 一个算法的好坏我们主要从"时间"和"空间" 两个维度来衡量 时间维度:是指执行当前算法所消耗的时间,我们通常用 "时间复 ...

  9. 《大话数据结构》第2章 算法基础 2.9 算法的时间复杂度

    2.9 算法的时间复杂度 2.9.1 算法时间复杂度定义 在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级.算法的时间复杂度,也就 ...

最新文章

  1. sql左连接_【PL/SQL 练习题】左连接条件里的And和Where
  2. robotframework常见问题解决汇总
  3. .NETFramework-Web.Mvc:ActionResult
  4. 启动mongodb服务器时发生系统错误5,CentOS 7系统下SELinux阻止MongoDB启动的问题详解...
  5. python所有文件都能用文本方式打开_python 打开文件方式讲解、常用读写操作指令(全)以及读写常见问题...
  6. 博士女友的朋友圈都藏着什么秘密?
  7. [转]:IOS检测网络连接状态
  8. Android使用的工具类
  9. Node对CommonJS模块的实现
  10. js排序算法详解-基数排序
  11. 番茄花园 Ghost XP SP3 极速装机版 V2013.05
  12. 再也不学AJAX了!(三)跨域获取资源 ② - JSONP CORS
  13. 数据、数据库、数据库管理系统,数据库系统的概念
  14. C++求sinx的n阶积分从0-PI/2
  15. ph用计算机换算成离子浓度,PH与氢离子的浓度换算表.doc
  16. python程序设计基础上机题5.16-----5.26(2)
  17. 邮箱如何群发邮件,公司邮件群发教程
  18. unity3d占用内存太大解决方法
  19. 计算机关闭远程桌面,windows 远程桌面关闭 运行程序退出
  20. 2020-05-31

热门文章

  1. 职场打怪,是不是升级越快越好?
  2. 独家 | 2019届互联网校招本科薪酬清单|湾区人工智能
  3. 有向无环图DAG 拓扑排序 代码解释
  4. MangoTrainingCourse课程hands-on lab-1
  5. 中教云教师备课云平台获北京市新技术新产品(服务)认定
  6. 华为鸿蒙OS用户今年底或达2亿 将发布自研鸿蒙编程语言
  7. 国庆档43.87亿收官:《长津湖》一家独大 影视股喜忧参半
  8. 蔚来打通京津冀都市圈高速换电网络
  9. Android 12 将支持游戏“边下边玩”
  10. 国家网信办:掌握超过100万用户个人信息运营者赴国外上市需申报审查