计算一个嵌套循环的时间复杂度

Joseph-Growth 2012-10-24 09:28:23
for(i = 1; i<=n; i*=2)
for(j=1; j<=i; j++)
laugh++;
请解释一下这里laugh++执行了多少次?
...全文
790 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
dpdp_2012 2012-10-24
  • 打赏
  • 举报
回复
我知道我为什么错了
i不是从1,2,3...h 而是1 2 4 8...
设最终i=2^h 总次数应为2^0+2^1+2^2+...+2^h=2^(h+1)-1 h=logn 向下取整
当n刚好为2^h时 总次数为2n-1

总执行是h*(1+2(h次方))/2是不对的,自己验算n=1 n=2 n=4的情况 明显不对
再说 1+2(h次方)始终为奇数 当h也为奇数时(如h=1,3..) 根本不能整除2 显然是错的
Joseph-Growth 2012-10-24
  • 打赏
  • 举报
回复
答案我已经知道了。1楼的回复跟我刚开始分析时犯了同样的错误。总执行是h*(1+2(h次方))/2。其中h为logn以2为底。
dpdp_2012 2012-10-24
  • 打赏
  • 举报
回复
i=1时 执行1次;i=2时 执行两次;.... ;i=h时执行h次 所以总执行 h*(h+1)/2 其中h为logn 以2为底,向下取整
Joseph-Growth 2012-10-24
  • 打赏
  • 举报
回复
是乘以(h+1)

69,372

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧