日期:2014-05-17  浏览次数:20944 次

求助!三重for循环的优化!

 for(int i=0;i<1000;i++){
 for(int j=0;j<100;j++){
 for(int k=0;k<10;k++){
 function(i,j,k);
 }
 }
 }


代码如上:
题目是金蝶的笔试题;
大概意思是:优化上面的代码,并给出理由~~~
小的菜鸟级别····不知从何下手!求大神出现解惑!!!
java 优化

------解决方案--------------------
循环数越多越放在里面层循环。
------解决方案--------------------
减小了栈切换的频率
------解决方案--------------------
引用:

 for(int i=0;i<1000;i++){
 for(int j=0;j<100;j++){
 for(int k=0;k<10;k++){
 function(i,j,k);
 }
 }
 }

不能光看function的执行次数,还要看i,j,k的比较次数。
i需要比较1000次,j需要比较1000*100次,k需要比较1000*100*10次。
总的比较次数是1000+1000*100+10*100*1000次

 for(int k=0;k<10;k++){
 for(int j=0;j<100;j++){
 for(int i=0;i<1000;i++){
 function(i,j,k);
 }
 }
 }

上述代码中function执行次数一样,
但是k需要比较10次,j需要比较10*100次,i需要比较10*100*1000次。
总的比较次数是10+10*100+10*100*1000次
所以后面的代码比前面的代码少比较1000+1000*100-(10+10*100)次!
------解决方案--------------------
int i = 0;
int j = 0;
int k = 0;
for (k = 0; k < 10; k++) {
for (j = 0; j < 100; j++) {
for (i = 0; i < 1000; i++) {
function(i, j, k);
}
}
}

------解决方案--------------------
写错一个地方,应该是

for (int i = 0, j = 0, k = 0; i < 1000; k++) {

if (k >= 10) {
k = 0;
j++;
if (j >= 100) {
j = 0;