关于多层for循环迭代的效率优化问题

关于多层for循环迭代的效率优化问题
今天笔试的时候遇到这么一道题目  说有上面这么循环嵌套  ,问怎么优化 并说明原因。   
 for(int i = 0 ; i < 1000 ;i++){
     for(int j = 0; i < 100; j++){
        for(int k = 0;k < 10; k++ ){
              fun(i,j,k);
        }
    }
}

咋一看,被这个题目蒙到了,可能是因为平时没怎么注意这些方面。因此上网找了些资料来学习一下。

对于这种多层循环的遍历,我们的一个原则是内大外小。

内大外小  
  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);  
  }  
  }  
  }   
  k <10;k++; 执行10次  
  j <100;j++ 执行10*100次  
  i <1000;i++ 执行10*100*1000次  
  function(i,j,k); 执行10*100*1000次  
  共执行语句数=(10+10*100+10*100*1000)*2+10*100*1000=3002020 


  内小外大  
  for( int k=0;k <1000;k++){  
  for(int j=0;j <100;j++){  
  for(int i=0;i <10;i++){  
  function(i,j,k);  
  }  
  }  
  }   
  k <1000;k++; 执行1000次  
  j <100;j++ 执行1000*100次  
  i <10;i++ 执行10*100*1000次  
  function(i,j,k); 执行10*100*1000次  
  共执行语句数=(1000+1000*100+10*100*1000)*2+10*100*1000=3202000  

所以执行效率应该是内大外小更高一写  
  内小外大-内大外小=3202000条语句-3002020条语句=199980条语句 


  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值