for循环效率问题
执行效率问题:
int row,col,sum;
int a[100][5];
for(row=0;row<100;row++) 效率低于 for(col=0;col<5;col++)
{ {
for(col=0;col<5;col++) for(row=0;row<100;row++)
{ {
sum = sum+a[row][col]; sum = sum+a[row][col];
} }
}
为什么呢?循环此书不是相同的么。
[解决办法]
前者,row = 0执行了1次,col=0执行了100次
后者,row = 0执行了5次,col=0执行了1次
[解决办法]
命中率的问题
第二个循环,cpu换页的次数少
[解决办法]
- C/C++ code
for(i=0;i<5;i++)for(j=0;j<100;j++){}效率高双层循环,较长的循环放在内层效率要高 for(j=0;j<100;j++)for(i=0;i<5;i++){}这样内层循环要构造100次,所以频繁的在循环和构造循环间切换for(i=0;i<5;i++)for(j=0;j<100;j++){}这样内层循环只要构造5次,所以效率要高
[解决办法]
用数学方法分析如下:
for (a)
{
for (b)
do sth.
}
理论分析得出的结论:
算法分析时候, 从第一层循环到第二层循环花费t1. 第二层执行花费t2
得出时间开销为a*t1 + a*b*t2;
因此当a < b时候, 开销就小了.
[解决办法]
虽然是二维数组,但是在内存存储的时候还是顺序存储的,第一个相当于直接从头到尾的访问一边,第二个循环就是不断的进行跳转;效率上要考虑跳转带来的开销!
[解决办法]