问题:求如下代码的时间复杂度
for(int i=1;i<n;i=2*i){
cout<<"Hello!"<<endl;
}
解:
第一次循环:i=1
第二次循环:i=2i=2
第三次循环:i=2i=2*2=22
…
第k次循环(最后一次):i=2k-1
最后一次决定了2k-1<n<2k,两边取2的对数,得到:
k-1<log2n<k,也就是:log2n<k<log2n+1
因此:这段代码执行了k次基本操作(打印字符串),即:k=floor(log2n),时间复杂度就是O(log(n))