for(i=1;i<=n;i++) for(j=2*i;j<=n;j++)的时间复杂度是?

烧饼兽 2013-01-07 12:06:36
for(i=1;i<=n;i++) for(j=2*i;j<=n;j++)的时间复杂度 是什么?
是O(n*n)还是O(n*log(n))? 求详细解释,最好能用数学证明下。
...全文
6609 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
烧饼兽 2013-01-07
  • 打赏
  • 举报
回复
哦,原来如此。谢谢两位,忘记等差数列这个好东西了
yel_hb 2013-01-07
  • 打赏
  • 举报
回复 3
对于内层循环,次数是n - 2 * i + 1, 对于外层循环,i范围其实是1 - n / 2 (在后面的内层循环直接跳出),累加和为 ((n - 2 * 1 + 1) + (n - 2 * n / 2 + 1)) * (n / 2) / 2 (等差数列求和公式) 得出时间复杂度 O ( n * n )
FancyMouse 2013-01-07
  • 打赏
  • 举报
回复
O(n^2) 公式是n+(n-2)+(n-4)+...,一共[n/2]个。当n为偶数的时候它就是2+4+6+...+n=n*(n+2)/4。

33,025

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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