算法-试题剖析1

分析下方代码时间复杂度 【代码的调度次数】

n = 10;
for(i = 1;i< n; i++)
    for(j=1;j<n;j+=n/2)
        for(k=1; k<n;k=2*k)
            x+=1;

看这个代码可知,x+=1;是循环最内侧代码,其时间复杂度最高,所以求这句代码的复杂度就可以。
从内到外看。
K循环从1 == 2的N次方每次开始是2的倍数,一直到>n-1;所以这层循环的运行次数是 log(n) 次。时间复杂度O(log(n)) //[log 默认底数为2]
j循环从1开始递增n/2次。一直到n-1;第一次递增之后j 变成(n+2)/2 .
第二次递增则是j=n+1,so.循环了两次。但是时间复杂度还是O(1) //因为常数的时间复杂度都是O(1)
i 循环从1开始每次增加1 一直到n-1 。所以循环体运行n-1次。时间复杂度为O(N)、 最后相乘得到的总时间复杂度就是O(N*1*LOG(N)); //强调一下。时间复杂度都不带常数项或者常熟系数的。所以不存在所谓的 O(2n) 这样的时间复杂度

@author Yars丶xiaowei

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值