怎么样计算循环次数?还有时间复杂度?

井白人 2009-07-11 11:24:08
如简单的为例子:
int n=10,count=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=i;j++)
for(int k=1;k<=j;k++)
count++;

次数?时间复杂度?
那么更多的循环次数,时间复杂度呢?
有没有什么方法计算这么类问题~~
...全文
1581 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
dwl1992 2011-10-16
  • 打赏
  • 举报
回复
n(n+1)(2n+1)/6复杂度n*3
CJM_jyf 2011-07-12
  • 打赏
  • 举报
回复
很好啊
tufebin 2010-03-04
  • 打赏
  • 举报
回复
为什么都是O(n^3)?
我们老师讲过这个应该是O(n^4)吧
boy222 2009-12-31
  • 打赏
  • 举报
回复
好象有最好 最差 平均 三个次数
boy222 2009-12-31
  • 打赏
  • 举报
回复
数据结构只说了大概的阶的求法 但是具体的循环次数尤其是多层嵌套 根本不提
shunshine988 2009-07-18
  • 打赏
  • 举报
回复
up
takeiteasyli 2009-07-16
  • 打赏
  • 举报
回复
数据结构里面的东西。
chinaboywuhan 2009-07-14
  • 打赏
  • 举报
回复
int n=10,count=0; //O(1);


for(int i=1;i <=n;i++) //O(N^3); 参见一般法则3
for(int j=1;j <=i;j++) //O(N^2);
for(int k=1;k <=j;k++)//O(N)


count++; //O(1)


总的时间复杂度为O(N^3),参见法则1,2,4

法则1:T1(N) = O(f(n)), T2(N) = O(g(n)) T1(N) + T2(N) = max(O(f(n)), O(g(n))
T1(N)*T2(N)= O(f(n)*g(n))
法则2:如果T(N)是k次多项式,那么T(N) = O(N^k)
法则3:对于任意的常数k,(logN)^k = O(N)
法则4:常数项或低阶项不要放入O()中。*** 这一条一定要注意。算法分析不考虑低阶项和常数项***

一般法则:
1、for循环的运行时间是该循环内部语句*迭代次数,参见法则1.2, 4
2、对于顺序语句运行时间为各个语句运行时间求和,参见法则1.1, 4
3、对于多层循环,运行时间为内部语句的运行时间*该组所有for循环大小
4.对于if/else运行时间为二个语句块中运行时间长的语句块的运行时间 + 判断时间
5、如果一个算法用O(1)时间该一个问题的大小分解成原来的1/2,那么该算法是O(logN),如果只是把问题减少一个常数,那么这个算法是(N)
weiqiyiji 2009-07-14
  • 打赏
  • 举报
回复
int n=10,count=0; //O(1);


for(int i=1;i <=n;i++) //O(N);


for(int j=1;j <=i;j++) //O(N^2);
for(int k=1;k <=j;k++)


count++; //O(1)

这个我觉得有点小问题吧,我没记错的话,按照算法导论的来
应该是

int n=10,count=0; //O(1);


for(int i=1;i <=n;i++) //O(N + 1); for执行了N次,但是比较了n+1次


for(int j=1;j <=i;j++) //O(N^2 + 1);
for(int k=1;k <=j;k++)


count++; //O(1)
虽然最后还是O(N^2)不过计算有点不一样
enter333 2009-07-14
  • 打赏
  • 举报
回复
好东西,顶个。
chinaboywuhan 2009-07-14
  • 打赏
  • 举报
回复
看错了,总的运行时间是O(N^3),呵呵
chinaboywuhan 2009-07-14
  • 打赏
  • 举报
回复
int n=10,count=0; //O(1);


for(int i=1;i <=n;i++) //O(N);


for(int j=1;j <=i;j++) //O(N^2);
for(int k=1;k <=j;k++)



count++; //O(1)


总的时间复杂度为O(N^2),参见法则1,2,4

法则1:T1(N) = O(f(n)), T2(N) = O(g(n)) T1(N) + T2(N) = max(O(f(n)), O(g(n))
T1(N)*T2(N)= O(f(n)*g(n))
法则2:如果T(N)是k次多项式,那么T(N) = O(N^k)
法则3:对于任意的常数k,(logN)^k = O(N)
法则4:常数项或低阶项不要放入O()中。

一般法则:
1、for循环的运行时间是该循环内部语句*迭代次数,参见法则1.2, 4
2、对于顺序语句运行时间为各个语句运行时间求和,参见法则1.1, 4
3、对于多层循环,运行时间为内部语句的运行时间*该组所有for循环大小
4.对于if/else运行时间为二个语句块中运行时间长的语句块的运行时间 + 判断时间
5、如果一个算法用O(1)时间该一个问题的大小分解成原来的1/2,那么该算法是O(logN),如果只是把问题减少一个常数,那么这个算法是(N)
chinaboywuhan 2009-07-14
  • 打赏
  • 举报
回复
int n=10,count=0; //O(1);


for(int i=1;i <=n;i++) //O(N);


for(int j=1;j <=i;j++) //O(N^2);
for(int k=1;k <=j;k++)



count++; //O(1)


MatthewChen16 2009-07-13
  • 打赏
  • 举报
回复
看下数据结构
skyctr 2009-07-13
  • 打赏
  • 举报
回复
mark 学习了
Stilfler 2009-07-13
  • 打赏
  • 举报
回复
好久没上数据结构的课了呀。
井白人 2009-07-12
  • 打赏
  • 举报
回复
也许给我个计算原理更实际~不是吗/
井白人 2009-07-12
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 Aeris 的回复:]
算法分析的确有方法,但没有什么一成不变的方法。要根据具体情况选用不同的方法。

像你的例子:

for(int i=1;i <=n;i++)
for(int j=1;j <=i;j++)
for(int k=1;k <=j;k++)
count++;

分析如下:

1.最内层循环体:count++; 我们认为,它的时间复杂度为1
2.分析最内层循环:很明显,在j给定的情况下,它需要执行

sum(1, k, 1, j) = j次

因为CSDN表示数学公式不方便,这里说明一下,上面的 su…
[/Quote]
谢谢~~
中才德创 2009-07-12
  • 打赏
  • 举报
回复
up
haitanshangdeyu 2009-07-12
  • 打赏
  • 举报
回复
大家分析的都好强……
我记得看一本什么书,上面写例题写的这种多重循环的。我看了之后感觉,其实只要把这个循环到最后要实现一个什么效果搞清楚就好求了。
比如说这个的话,要是我会这么求
最内层的语句执行一次复杂度为1,对它从K=1到K=j求和,得到j的表达式。然后再对求和所得,对j从j=1到j=i求和,得到带i的表达式,再对该式i从i=1到n求和,就可以求得只含有n的表达式了。
确实如楼上所说,不好弄公示,不然三个求和符号就可以说清楚的东西让我啰嗦了这么多……
加载更多回复(9)

64,266

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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