• 计算时间复杂度


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

    一、单层循环

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

    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。所以这种情况就是如果外层不影响内层直接就是两层循环分别算出各自需要的次数然后相乘。

  • 相关阅读:
    开放式激光振镜运动控制器:C++ 快速调用图形库应用
    开发GD32遇到的坑B点
    机器学习西瓜书——第五章 神经网络
    网络编程——套接字
    自学Python只看这个够不够........?
    自动控制原理2.2---控制系统的复数域数学模型
    Git命令图解
    Shell 一键替换当前目录下所有文件的指定内容
    视频服务HDR Vivid 还原色彩,让所见成“真”
    热烈推荐的 几个关于React的 工具
  • 原文地址:https://blog.csdn.net/ylxb2234/article/details/133645435