下面程序段的时间复杂度是 ? i=1; while(i<=n) i=i*2

下面程序段的时间复杂度是 ? i=1; while(i<=n) i=i*2,第1张

i=1; while(i<=n) i=i*2的时间复杂度O(log2n)。

整段代码语句,中循环体只有一个while(i<=n),执行的次数是:

i = 1,i = 1*2=2,判断2是否小于等于n,是则继续循环,否则跳出循环。

i =2,i = 2*2=4,判断4是否小于等于n,是则继续循环,否则跳出循环。

i =4  ,i = 4*2=8,判断8是否小于等于n,是则继续循环,否则跳出循环。

根据规律发现,循环次数由log2n决定,所以复杂度是O(log2n)。

扩展资料:

一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。

但不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费的时间多,哪个算法花费的时间少就可以了。并且一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。

1、第一行是声明变量,整型数组x[3]和整型变量ijk

2、第二行和第三行for循环对数组x[]进行初始化,数组元素全都为0

3、第四行给整形变量k赋值2

4、第五行第六行第八行这样看

for(i=0i<2i++){//第一层循,当i=0时和i=1可以循环,i=2就不循环了

    for(j=0j<2j++){//第二层循环当,j=0时和j=1可以循环,i=2就不循环了

        x[j]=x[j]+1//当i=0时,进行一次x[0]=x[0]+1,和x[1]=x[1]+1,可以知道

        //此时x数组存储内容x[]={1,1,0}

        //当i=1时,再进行一次x[0]=x[0]+1,和x[1]=x[1]+1,此时数组内容是

        //x[]={2,2,0}此时x[1]=2,所以选A

    }

}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/7687548.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-08
下一篇 2023-04-08

发表评论

登录后才能评论

评论列表(0条)

保存