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