【发布时间】:2014-09-29 19:35:52
【问题描述】:
我试图确定为什么这个算法的 bigO 是 m^2*n,以及为什么最里面的循环以 m^2*n 步执行。
int m=10, n=15;
int inLoop = 0, midLoop = 0, outLoop = 0;
for(int i=1;i<=m;i++)
{
outLoop++;
for(int j=1;j<=2*i-1;j++)
{
midLoop++;
for(int k=1;k<=n;k++)
{
inLoop++;
}
}
}
System.out.println("Out Loop " + outLoop);
System.out.println("Mid Loop " + midLoop);
System.out.println("Inner Loop " + inLoop);
当我运行它时,我得到内部循环运行 1500 次,中间循环运行 100 次,最外面的循环运行 10 次。
在运行这段代码之前,我认为这段代码运行了第一个循环 m 次,第二个循环 m^2 次,最后一个循环 n 次,使用这些值将导致内部循环输出为 15,000。
显然,该算法似乎在 m^2 * n 步骤中执行最内层循环,而不是我认为的 m^3*n 步骤。
【问题讨论】:
-
为什么中间循环会运行 m^2 次?
-
(2i-1) 当你计算出来时(它是一个总和)结果等于 m^2 次。 @指南针
-
在运行这段代码之前,我以为这段代码运行了第一个循环 m 次,第二个循环 m^2 次,最后一个循环 n 次 第二个循环或那么这一行中的最后一个循环是不正确的。要么是最后一个循环的 m^2*n,要么是第二个循环的另一个 m。