当前位置: 代码迷 >> C语言 >> 请教一个BIG O Notation 问题
  详细解决方案

请教一个BIG O Notation 问题

热度:355   发布时间:2006-08-23 15:15:43.0
请教一个BIG O Notation 问题
int i,j,k;
for (i = 1; i < n; i++)
for (j = 0; j < i*i; j++)
if (j % i == 0)
for (k = 0; k < j; k++)
sum++;

整个片断该如何分析?红色部分会被执行多少次,是否可以忽略
希望各位不吝赐教
搜索更多相关的解决方案: Notation  BIG  sum  int  

----------------解决方案--------------------------------------------------------

int i,j,k,counter=0;
for (i = 1; i < n; i++)
for (j = 0; j < i*i; j++)
{
counter++; //执行次数.
if (j % i == 0)
for (k = 0; k < j; k++)
sum++;
}
红色部分不能忽略,if是for()运行的前提条件。而sum++;要执行多少次由它上面的for确定,是最近的for的执行语句。


----------------解决方案--------------------------------------------------------
counter++ 的确可以算出执行了多少次

但能否用n表达出来?

因为最后我要写出这个片段总共执行多少次的表达式
----------------解决方案--------------------------------------------------------

没明白您要表达什么意思


----------------解决方案--------------------------------------------------------

就是说如果不包括红色部分的话

这个程序会被执行 (2(n^3)-3(n^2)-n)/6 次 Big O 分析就是 O(n^3)

现在我不知道加上红色那部分

这个程序会被执行多少次


----------------解决方案--------------------------------------------------------
饿,搞了半天您让我算这个...
这个我也算不来...
----------------解决方案--------------------------------------------------------

对于一个确定的i ,红色部分if语句被执行i次(即j%i==0有i次为真)
所以if语句一共被执行1+2+3+...+n-1=n*(n-1)/2

[此贴子已经被作者于2006-8-23 20:48:07编辑过]


----------------解决方案--------------------------------------------------------

多谢楼上的

也感谢soft_wind


----------------解决方案--------------------------------------------------------

不过我还是算不出这个程序总共被执行了多少次


----------------解决方案--------------------------------------------------------
最底层的sum++是无法用n的代数式表示的,
那个红色的for也是无法用n的代数式表示的.
----------------解决方案--------------------------------------------------------