这些for循环的Big O表示法是什么?

时间:2016-03-23 21:00:05

标签: java big-o

我正在完成我班级的作业,这个特殊部分涉及对几个for循环的运行时间进行“分析”。教练指出他想要一个Big Oh Notation答案。

我的基础是总运行时间基于:

1)The cost of executing each statement
2)The frequency of execution of each statement
3)The idea of working from "inside and out", specifically starting from inner loops.

我知道:

total = 0;

   for (int i = 0; i < n;i++){
    total++;
}

答案:O(N)其线性运行。

for (int i = 0; i < n;++i)
     for (int j = 0; j < n;++j)
     total++;

答案:O(N ^ 2),我们只关心N的增长量。

我很困惑

for (int i = 0;i < n;++i)
     for (j=0;j < n * n;++j)
     ++total;

for ( i = 0;i < n;++i)
     for (j = 0; j < i;++j)
     ++total;

最后但并非最不重要的是,我从我的教科书中假设所有三重嵌套循环都在N ^ 3时间运行?

1 个答案:

答案 0 :(得分:4)

您可以使用Sigma表示法分析算法,计算/扩展算法内部for循环运行的迭代次数:

enter image description here

T_a涵盖的地方

for (i = 0; i < n; ++i)
    for (j = 0; j < n * n; ++j)
        ++total;

T_b

for (i = 0; i < n; ++i)
    for (j = 0; j < i; ++j)
        ++total;

最后,关于你的问题的说明:

  

&#34;最后但并非最不重要的是,我从我的教科书中假设所有   三重嵌套循环在N^3时间运行?&#34;

事实并非如此:它依赖于每个循环的签名中的迭代增加以及 bounded 。比较例如上面T_a中的内环(由n^2限定,但在每次迭代中仅增加1)或者例如the algorithm analyzed in this answer,或者,对于一个稍微棘手的案例,the single loop analyzed in this answer