数据结构之时间复杂度浅谈

一直对时间复杂度这个概念很模糊,今天在简书上看到了一篇有关时间复杂度的介绍,觉得不错(数据结构)十分钟搞定时间复杂度(算法的时间复杂度),因此作一下记录做个分享。

1、时间复杂度的概念

通常是指算法的时间复杂度,即用来度量算法的运行时间,记作T(n) =O( f(n) ),表示随着输入大小n的增加,算法执行需要的时间的增长速度可以用f(n){即执行次数}来表示。举个例子(如下):

此时的f(n)=n+1 + n + 1 =2n+2,则T(n)=O(n)。

由该例子我们可以看到,我们是将f(n)经过一些规则处理后得到了T(n),那么这个处理规则如下所示

  1、忽略常数项,常数项对算法的处理速度影响不大,比如当f(n)=C( C为常数,T(n)=O(1) )

  2、当f(n)中有高低次项时,我们取最高项,舍去最低项,比如当f(n)=2n^2+n, T(n)=O(n^2)

  3、又因为函数的阶数对函数的增长速度的影响是最显著的,所以我们忽略高次项的系数,设为1

 

2、时间复杂度的计算

  由1可知,由执行次数f(n)得到时间复杂度T(n)并不困难,困难的是从算法中通过分析和数学运算得到f(n)。因此,总结下列四个便利的计算法则,这些法则都是可以简单推导出来的,总结出来以便提高效率。

      1、对于一个单循环,假设循环体的复杂度为o(m),循环次数为n,那么这个循环的时间复杂度为O(m*n)

该例子,循环体复杂度为O(1),循环次数为n,所以时间复杂度为O(n)

       2、对于一个多循环来说,假设循环体的时间复杂度为O(m1),O(m2)......,各个循环次数分别为a,b,c...,那么这个循环的时间复杂度为O(m1*m2*a*b*c...).分析的时候应该从里向外分析这些循环。

该例子,循环体复杂度均为O(1),循环次数为n,n;所以时间复杂度为O(1*1*n*n)=O(n*2)

     3、顺序执行的算法,总的时间复杂度为其中最大值

此时间复杂度为MAX{O(n*2),O(n)=O(n*2)

     4、对于条件判断语句,总的时间复杂度为其中最大值,计算方法与顺序执行类似。

 

 

希望以后自己能坚持写博客分享的习惯,这样对自身的思维训练和行文能力都会有很大的提升,与此同时,也能加深我对知识的理解!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值