计算时间复杂度

时间复杂度与语句被重复执行的次数息息相关。

一、单层循环

单层循环大致可以分为两种,一种是循环体内的语句不影响循环条件的判定。另一种就是循环体内的语句会影响循环条件的判定。

1、循环体内的语句不影响循环条件的判定

这种情况十分常见且简单,比如给数组插入数据。这里不做过多说明。

2、循环体内的语句会影响循环条件的判定

 很明显可以看到,i=i*2会影响i的值,从而影响下一次循环的判定。

我们假设这个语句会循环t次,因为i的初始值为1,所以在循环内i的最终值就是2^{t-1},那么就有2^{t-1}\leq n

所以t\leq 1+\log _{2}n ,所以答案选D。

二、双层循环

双层循环也可以分为以下两种,

1、内层循环条件与外层循环的变量有关

很明显在内层循环里面的j的判定条件与外层循环变量i的值有关。i的值的范围为从n-1到2,j的值的范围为从1到i-1。于是里面对换的次数应该为:\sum_{i=2}^{i=n-1}\sum_{j=1}^{j=i-1}1= \sum_{i=2}^{n-1}i-1最终结果为\frac{\left ( n-1 \right )\left ( n-2 \right )}{2},所以答案选D。所以这种情况就是如果内外层有关,那么就是双重求和。

 这里要注意外层循环的操作语句还会影响外层循环的判定。我们现在只看这一层循环,因为执行第一次的时候i为1,即2^{0},第二次的时候i的值为2,即2^{1}。以此类推,假设这层循环执行t次,那么i的最终值应该为2^{t-1},且2^{t-1}< n。并且注意,第t+1次时循环终止,即i的值为2^{t}。那么肯定就有2^{t}\geq n

而当i每次对应一个值的时候,内层循环就会执行对应的值的次数。那么总循环次数实际就为1+2+4+8+...+2^{t-1}。很明显这是一个等比数列,可以得出最终结果为2^{t}-1。因为2^{t-1}< n\leq 2^{t},给不等式2^{t-1}< n两边同时乘以2,那么就有2^{t}< 2n,则有n< 2^{t}-1< 2n。所以答案选B。

这道题虽然外层循环变量与内层循环条件有关,但是因为i的变化不是线性递增的,它是呈指数级增长的,所以就不能用简单的双重求和来表示。

2、内层循环条件与外层循环的变量无关

在内层循环里面j的判定条件与n有关与外层循环变量i无关,k的范围从1到n,j的范围从1到n。但需要注意的是k的操作语句为k*=2。所以外层循环最多执行t\leq1+ \log _{2}n次。而内层循环执行n次,所以答案选C。所以这种情况就是如果外层不影响内层直接就是两层循环分别算出各自需要的次数然后相乘。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值