以下算法的时间复杂度为 O(log₂n)
void fun(int n){
int i=1;
while(i<n)
i=i*2;
}
/*基本运算(执行频率最高的语句)i=i*2(每次执行一次i*2),又2^i≤n;
设执行次数为t,则判断条件可理解为2^t=n,
即t=log₂n,则T(n)=O(log₂n)*/
设n是描述问题规模的负整数,下面的程序片段复杂度是O(log₂n)
x=2;
while(x<n/2)
x=2*x;
/*基本运算(执行频率最高的语句)为x=2*x,每执行一次x乘2,
设执行次数为t,则有2^(t+1)<n/2,所以t<log₂(n/2)-1=log₂n-2,
得T(n)=O(log₂n)*/
下列函数的时间复杂度是O(n^(1/2))
int func(int n){
int i=0,sum=0;
while(sum<n) sum+= ++i;
return i;
}
/*基本运算sum+= ++i,它等价于++i;sum=sum+i,每执行一次i自增1.
i=1时,sum=0+1;
i=2时,sum=0+1+2;
i=3时,sum=0+1+2+3,
以此类推得出sum=0+1+2+3+...+i=(1+i)*i/2,
可知循环次数t满足(1+t)*t/2<n,
因此时间复杂度为O(n^(1/2))*/