1、设n为如下程序段处理的数据个数,求时间复杂度
for(i=l;<n;i=2*i)
std::cout<<“i=”<<std::end1;
分析:
主看for循环,当>=n时结 束,假设执行m次结束,i1=2= 21 ,i2 =2*2 = 22,..,im二2m,则有2m=n,大致口算m=1og2n, 则时间复杂度为O( log2n )
2、分析以下时间复杂度
void fun(int n)
{
int i=0,s=0;
while(s<n)
{
++i;
s=s+i;
}
}
分析:
n为规模,基本操作语句是++i和s=s+i,while循环处当s>=n不符合条件停止,假设执行m次结束,i=1,2,3..依次渐加,i只影响s值,主要看s, s1 =1, s2 =1+2=3, s3 =1+2+3=6,... sm =1+2+3+...+m=m(m+1)/2 ,正解答案中给出,m(m+1)/2+k=n (k起修正作用的常数),也可大致口算m≈ n−−√ ,则时间复杂度为O( n−−√ )
3、分析以