我正在完成我班级的作业,这个特殊部分涉及对几个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时间运行?
答案 0 :(得分:4)
您可以使用Sigma表示法分析算法,计算/扩展算法内部for循环运行的迭代次数:
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。