n/2就是 Ologn吗?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
花森煜米 2021-06-07 10:40:41
int i = 1;
while(i<n)
{
    i = i * 2;
}

从上面代码可以看到,在while循环里面,每次都将 i 乘以 2,乘完之后,i 距离 n 就越来越近了。我们试着求解一下,假设循环x次之后,i 就大于 2 了,此时这个循环就退出了,也就是说 2 的 x 次方等于 n,那么 x = log2^n
也就是说当循环 log2^n 次以后,这个代码就结束了。因此这个代码的时间复杂度为:O(logn)

liuyubobobo 2020-08-03 04:55:20

不是。O(n/2) 不是 O(logn)


for(int i = 0; i < n; i += 2) 这个循环会执行 O(n/2) 次;


for(int i = 0; i < n; i *= 2)这个循环会执行 O(logn) 次;


尝试带入一个 n,看一看这两个循环运行次数的区别是怎样的?比如 n = 1024,会怎样?


继续加油!:)

  • 第一个执行完循环最后 2*i ≈ n,也就是大致看作 i = n/2 次。 第二个执行完循环最后可看作 2^i ≈ n,也就是执行 i = log2(n) 次。
    2020-09-23 14:56:17
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
算法与数据结构
  • 参与学习       2583    人
  • 解答问题       1082    个

慕课网算法名师Liuyubobobo,5年集大成之作 从0到工作5年,算法与数据结构系统解决方案

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师