时间复杂度三道简单计算

    技术2025-01-18  47

    以下算法的时间复杂度为 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))*/

     

    Processed: 0.016, SQL: 9