关于多层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条语句

时间: 2024-10-11 16:37:17

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

javascript性能优化之循环迭代(duff)

这段时间一直再学习<高性能javascript>这本书,在这里记录一些学习心得和笔记... 循环迭代之“Duff's Device”优化迭代次数在1000以上的循环. 函数如下: 1 function duff(items) { 2 if(items && items.length) { 3 var l = items.length, i = l % 8; 4 while(i) { 5 console.log(items[-- l]); 6 i --; 7 } 8 i = Ma

(同事的原创)关于效率优化的一点工作心得

文是单位同事胡计平的一个关于效率优化的总结,内容很实用,转贴到blog里,以备自己日后查看,也希望能对更多的人有所帮助 最近写一程序,跟效率优化打上了交道,把其中的体会写下来,供大家讨论分享,我想效率优化工作可以分为如下几个步骤: (1)查找影响效率的瓶颈之处:定位的方法当然是使用时间函数,一般精确的使用GetTickCount就可以,非常精确的使用 function GetCycleCount: Int64;asm  RDTSC;    //得到当前CPU的时钟周期数.end; 想必这个知识大

c++程序的效率优化初涉

能写出稳定高效的程序一直是程序员所追求的,今天就和大家一起探讨一下关于C++程序优化的几点看法. 由于C/C++语言的复杂性,致使C++编译器隐藏了层层幔布,我们不经意的一条语句都可能是编译器幕后几经周折的结果,在要求程序高效运行的环境下,每一条语句都会让我们慎之又慎,而程序优化又是个十分广泛的话题,包括程序架构设计的优化,语言本身的优化,编程技巧和策略等等,如此大的范围非我能力所及,这里谈的优化就是在实际开发中遇到的问题. 一.  举手之劳的小差别 既然说优化就一定要仔细,不放过任何微小的细节

(转)as3效率优化

1.改进算法无论对于那一种程序,好的算法总是非常重要的,而且能够极大地提高程序性能,所以任何性能的优化第一步就是从算法或者说程序逻辑的优化开始,检查自己的程序是否有多余的运算,是否在没有必要的时候做了无用功,往往从这些方面就能找到那些导致性能低下的地方. 2.优化细节代码针对细节总是好的,有一些小技巧比如:用 var obj:Object = {}; 要比 var obj:Object = new Object();要好:var arr:Array = []; 要比 var arr:Array

php程序效率优化的一些策略小结

php程序效率优化的一些策略小结 1.在可以用file_get_contents替代file.fopen.feof.fgets等系列方法的情况下,尽量用 file_get_contents,因为他的效率高得多!但是要注意file_get_contents在打开一个URL文件时候的PHP版本问题; 2.尽量的少进行文件操作,虽然PHP的文件操作效率也不低的; 3.优化Select SQL语句,在可能的情况下尽量少的进行Insert.Update操作(在update上,我被恶批过); 4.尽可能的使

再谈循环&amp;迭代&amp;回溯&amp;递归&amp;递推这些基本概念

循环:不断重复进行某一运算.操作. 迭代:不断对前一旧值运算得到新值直到达到精度.一般用于得到近似目标值,反复循环同一运算式(函数),并且总是把前一 次运算结果反代会运算式进行下一次运算 递推:从初值出发反复进行某一运算得到所需结果.-----从已知到未知,从小到达(比如每年长高9cm,20年180,30后270) 回溯:递归时经历的一个过程. 递归:从所需结果出发不断回溯前一运算直到回到初值再递推得到所需结果----从未知到已知,从大到小,再从小到大(你想进bat,那么编程就的牛逼,就得卸载玩

多层嵌套可迭代列表的剥皮函数

python中很多时候可能会遇到多层嵌套可迭代列表如下: list1 = [11, 22, [33, 44, [55, 66]]] list2 = [11, 22, [33, 44]] 其中我们想要的结果只是一个所有的结果列表而已.此时就需要一个剥皮函数,把嵌套的元素全部剥离出来,放入一个列表中(递归实现).实现函数如下: def f(x, ret=None): # 把上一次的结果传递过来 if not ret: ret = [] for i in x: if isinstance(i, lis

验证元素的唯一性(二重循环法和快排优化)

学校练习,简单的我就不放上来了,值得整理的,我保存一下 习题4 1.1.验证元素唯一性(二重循环)   1.1.1.算法描述 验证元素唯一性,主要方法是:建立两重循环,进行校验每个元素和其他元素的 1.1.2.伪代码   UniqueElements(A[0..m-1]) //验证给定数组中的元素是否唯一 //输入:数组A[0..n-1] //输出:如果A中元素全部唯一,返回true //否则返回false for i<- 0 to n-2 do for j<- i+1 to n-1 do i

EF循环迭代导致性能的丢失,你知道?

前言 在工作当中呢,没怎么用到过EF,所以为了遗忘这一部分知识,偶尔会去写写小的demo,偶然机会在EF循环迭代中发现居然影响性能这么严重,当我们在用时或许大概也许可能都曾这样写过,但是你注意到了吗,你怀疑过吗?这就是本节所要讨论的话题.若有错误,请批评指出. 话题 关于基础知识我们就不废话了哈,我们假设这样一个场景(不一定严谨,只是为了引出话题):当在下单中,如果有多个人下单,此时我们需要通过订单Id去得到客户Id.在这一场景中我们给出一个订单类以及订单处理类.如下: //订单类 public