| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1760 人关注过本帖
标题:一个简单的求时间复杂度的题目
只看楼主 加入收藏
qq383264679
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:155
专家分:130
注 册:2012-1-19
结帖率:88.89%
收藏
已结贴  问题点数:20 回复次数:11 
一个简单的求时间复杂度的题目
可能对与一个双重循环的这个样一个问题,我就不会再这里发帖了。例子如下:
          for(i = 0; i < n; i++)
               for(j = 0; j < i; j++)
                         { a++;  }
    基本语句c1:a++;
       这个题目用数学归纳法很好证明:
当i = 0; f(n) = 0;
当i = 1; f(n) = 1;
当i = 2; f(n) = 2;
....
当i = n-1; f(n) = n-1;
  基本语句执行的次数便是:0 + 1 + 2 + ....+ (n-1) = n(n-1)/2;
    f(n) = n*(n-1)/2 < n*n/2 = O(n~2);
但是对与一个一个三重循环
           for(i = 0; i < n; i++)
               for(j = 0; j < i; j++)
                   for(k = 0; k < j; k++
                         { a++;  }
却不知道怎么分析,希望高手讲解!


搜索更多相关主题的帖子: 数学归纳法 
2012-09-03 19:00
JON_me
Rank: 2
等 级:论坛游民
帖 子:30
专家分:68
注 册:2012-5-4
收藏
得分:0 
同理可得······

因为爱情,不会轻易悲伤······
2012-09-03 19:38
czz5242199
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:660
专家分:2400
注 册:2011-10-26
收藏
得分:10 
估算即可,3重循环就是O(N^3)

如果硬要算的话,就是SUM(1/2k^2-1/2k) 1<=k<=n-1

=1/2*(1^2+2^2+....(n-1)^2)-1/2(1+2+3...n-1)
=1/12*(n-1)*(n-2)*(2n-3)-1/4*(n-1)*n

去掉低次项后就是O(N^3)
2012-09-03 19:55
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:10 
好久不见小曹了,假期干什么去了?

我的计算结果是1/12*n*(n-1)*(4n-5)

重剑无锋,大巧不工
2012-09-03 21:00
czz5242199
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:660
专家分:2400
注 册:2011-10-26
收藏
得分:0 
回复 4楼 beyondyf
假期在家,基本没时间电脑。
2012-09-03 21:54
czz5242199
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:660
专家分:2400
注 册:2011-10-26
收藏
得分:0 
这两天刚回学校,为什么会跳到4n-5?我记得1*1+2*2+..n*n=1/6*n*(n+1)*(2n+1)?
2012-09-03 21:56
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
没错,所以将n-1代入后就是1/6*n*(n-1)*(2n-1)

重剑无锋,大巧不工
2012-09-03 22:17
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
楼主给的那个例子就有问题吧。
for(i = 0; i < n; i++) 如果真是求和是 n(n-1)/2。但你现在是在算执行了多少次唉。还是 n(n+1)/2 吧。
合着要是我写 for(i = -1; i <= 1; i++) 难道执行次数还成了 0 了!?
2012-09-03 22:51
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
回复 5楼 czz5242199
欢迎小曹回来~~
小曹现在多大了?
2012-09-03 22:53
czz5242199
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:660
专家分:2400
注 册:2011-10-26
收藏
得分:0 
回复 9楼 pangding
下学期大三了,前几天刚满20岁
2012-09-03 23:21
快速回复:一个简单的求时间复杂度的题目
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015953 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved