分析下列算法的时间复杂度 void f(int n) { int i=1; while (i<=n) i=2*i; }

如题所述

时间复杂度,就是执行次数最多的那个语句次数。
这段程序中,执行次数最多的就是 i=2*i;
其执行的次数为:

2*2*2*2*...........*2<=n
假设为x次,
则 2^x <=n
2^x =n 可以推出 x = log2n
所以,时间复杂度为 O(log2n)

这里的2是log的下标。
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-09-14
设复杂度T(n)
那么T(n) = 1 + T(n/2)
所以T(n) = log2(n)
第2个回答  2011-09-14
O(n)追问

有没有过程?

追答

。。。。。。。。。。。。。。。。。。一层循环就是O(n)吧,,

...void f(int n) { int i=1; while (i<=n) i=2*i; }
时间复杂度,就是执行次数最多的那个语句次数。这段程序中,执行次数最多的就是 i=2*i;其执行的次数为:2*2*2*2*...*2<=n 假设为x次,则 2^x <=n 2^x =n 可以推出 x = log2n 所以,时间复杂度为 O(log2n)这里的2是log的下标。

分析下列程序段的时间复杂度是___。 i=1: while(i<=n) i=i*2;
【答案】:C 循环体里面是i=i*2,即每循环一次i值增加一倍,所以执行次数与n之间是以2为底的对数关系,故时间复杂度为O(log2n)。

i=1; while(i<=n) i=i*2 这个算法的时间复杂度怎么算
一般情况下,算法的基本操作重复执行的次数是模块n的某一个函数f (n),因此,算法的时间复杂度记做:T (n) =0 (f (n) )。随着模块n的增大,算法执行的时间的增长率和f (n)的增长率成正比,所以f (n)越小,算法的时间复杂度越低,算法的效率越高。在计算时间复杂度的时候,先找出算法的基...

程序段“for(i=1; i<=n;) i=i*2;”的时间复杂度?
答案是:O(log2n )i=1; ① while (i<=n)i=i*2; ② 解: 语句1的频度是1,设语句2的频度是f(n), 则:2^f(n)<=n;f(n)<=log2n 取最大值f(n)= log2n,T(n)=O(log2n ) ---*来源于百度*--- \/\/\/

i=1; while (i<=n) i=i*2 时间复杂度
没错,n=4的时候,log2n=2。但是,你有没有注意到,时间复杂度是O(log2n),不是log2n。你不能无视符号"O"。这个符号的意思是:时间复杂度不会比log2n大很多。通俗的说:就是时间复杂度或者和log2n在同一数量级,或者比log2n小。

下面程序段的时间复杂度是 ? i=1; while(i<=n) i=i*2
i=1; while(i<=n) i=i*2的时间复杂度O(log2n)。整段代码语句,中循环体只有一个while(i<=n),执行的次数是:i = 1,i = 1*2=2,判断2是否小于等于n,是则继续循环,否则跳出循环。i =2,i = 2*2=4,判断4是否小于等于n,是则继续循环,否则跳出循环。i =4 ,i = 4*...

...O(log{2}n):int i = 1; while(i <= n) i = i * 2;
因为从判断语句上看i从1循环到n,但是循环体中每次循环i都乘以2,所以实际上循环体只执行了log2n次(这是个简单的数学运算吧!),而判断时间复杂度一般都是看循环体的实际有效执行语句的次数,所以该循环的时间复杂度是O(log2n)。

...fun(int n){ int i=1,s=1; while(s<n)s+=++i; return i; }_百度...
这个程序的意思是找到最小的i满足1 + 2 + ... + i >= n 因为1 + 2 + ... + i = (i + 1) * i \/ 2,i每次增加1的话只需要根号n次就能够得到得到结果 所以复杂度是O(根号n)的

for(i=1;i<=n;i=2*i)的时间复杂度
当m大于等于1时,时间复杂度为n,但是由于i永远大于等于1,这个循环是个死循环,n为无穷大。计算方法 1. 一般情况下,算法的基本操作重复执行的次数是模块n的某一个函数f(n),因此,算法的时间复杂度记做:T(n)=O(f(n))分析:随着模块n的增大,算法执行的时间的增长率和f(n)的增长率...

void fun(int n) {int i=1,k=100; while(i<n) {k=k+1;i+=2;}}的时间...
显然循环执行的次数为((n-1)\/2)上取整,因此时间复杂度为O(n)

相似回答