我想确定为什么这个算法的bigO是m^2 * n,以及为什么最内层循环在m^2 * n步骤中执行。为什么这个算法的bigO 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次。
运行此代码之前我认为这代码跑第一环路米倍,第二环路平方公尺倍,最后循环Ñ倍,这与这些值将导致内循环输出为15,000。
显然,算法似乎是执行最内层循环中平方公尺* n个步骤而不是在立方公尺* n个步骤我相信这将是。
为什么中间循环会运行m^2次? – Compass 2014-09-29 19:39:32
(2i-1)当你解决这个问题(这是一个总结)结果是相等的m^2次。 @Compass – mufc 2014-09-29 19:40:53
_在运行这段代码之前,我认为这段代码运行了第一个循环m次,第二个循环运行了m^2次,最后一个循环运行了n次_第二个循环或者这一行中的最后一个循环都不正确。要么是最后一个循环的m^2 * n,要么是第二个循环的另一个m。 – Compass 2014-09-29 19:45:47