这个程序为什么时间复杂度是log2n呢请各位指教

2021-01-05 12:03:33 字数 2475 阅读 3720

1楼:匿名用户

2的log n次方等于n,i=i*2中的数字2就代表log中的底,如果i=i*3,那么底就是3。意思就是i要经过logn次循环运算才能达到停止条件,也就是i>n

c 语言快速排序最好情况时间复杂度为什么是 nlog2n ?(菜鸟**)

2楼:匿名用户

快速排序最好的情况是每次把上一次的数组平均分成两个子数组。设数组总数一共为n,如果把这n个数每次分成2半最后每个数组只包含一个元素,假设要分k次,则2的k次方=n,解得k=log2 n(log以2为底对n取对数).也就是说要分log2 n次,而每次都是处理n个数据。

所以总的时间复杂度为o(n*log2 n)。

3楼:匿名用户

第一趟要遍历整个数组复杂度为n很好理解,接下来的log2n实际上和二分法查找规律差不多,每次的规模减半,设计算次数为x,则n = 2^x,所以x = log2n。

有没有时间复杂度为log2(n-1)的程序

4楼:浩乾大大

。。。写一个for循环,循环log2(n-1)次

下面程序段的时间复杂度是 ? i=1; while(i<=n) i=i*2

5楼:仁昌居士

i=1; while(i<=n) i=i*2的时间复杂度copyo(log2n)。

整段**语句,中循环体只有一个while(i<=n),执行的次数是:

i = 1,i = 1*2=2,判断2是否小于等于n,是则继续循环,否则跳出循环。

i =2,i = 2*2=4,判断4是否小于等于n,是则继续循环,否则跳出循环。

i =4 ,i = 4*2=8,判断8是否小于等于n,是则继续循环,否则跳出循环。

根据规律发现,循环次数由log2n决定,所以复杂度是o(log2n)。

6楼:匿名用户

假设循环次数是x。

i = 1, 2, 4, 8, 16 ,i = 2^x条件是i <= n

2^x <= n

所以x <= log2n 一共执行循环体log2n次,所以复杂度是o(log2n)

7楼:匿名用户

循环退出的条件为i > n

设第k次循环后退出循环

于是2^k > n

因此k > log2n 以2为底的对数,k的实际值为log2n上取整

因此时间复杂度为o(log2n)

为什么该循环的时间复杂度为o(log{2}n):int i = 1; while(i <= n) i = i * 2;

8楼:匿名用户

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

c语言时间复杂度里的 lg n与log2 n是一样的吗?

9楼:寻魂

都是对的哦~因为实际的需要,对数的值可以根据数量级改变,方便统计比较为主的。当然lg n和log2n数值时不等的,在你比较一类算法的复杂度的时候,取对数的底数必须一样才有可比性,所以只是方便比较用,都是正确的。

10楼:匿名用户

它们相差常数倍。lon2 n=ln n/ln 2.但就数量级而言,它们是相同的

复杂度o(nlog2n)怎么计算的?

11楼:匿名用户

for(int j=1; j<=n; j*=2)这个循环最终执行的次数假设为x,则x次的时候j=2^x 。

当j>n时停止执行,于是2^x>n ,则可以认为该循环一共执行了log2(n)次。

所以该循环的时间复杂度为o(log2(n)),简记为o(log n) ,忽略掉2的底数。

方法:1、首先,看外循环for(i=0;i2、再看内部循环,for(j=1;jn===》x=log2(n)。

3、如果把两个循环合在一起看,也就是一共循环了n个x次,也就是log2(n)。

时间复杂度o(log2^n)的循环语句

12楼:匿名用户

错了 明显的程序

i的初始值应当为1.

这个循环执行的次数为以2为底n的对数次

13楼:匿名用户

....就相当于2^m = n两边取以2为底的对数。就是m的值。

程序中的时间复杂度是怎么计算的?

14楼:匿名用户

算法复杂度的介绍,见百科:

http://baike.baidu.***/view/7527.htm