嵌套循环的效率问题,很简单

wenww 2004-12-22 09:01:28
比如
for (i=0;i<5;i++)
     for (j=0;j<10;j++)


问一下要使运行效率高的话应该是外面那层循环次数多还是少

需要详细说明一下原理和原因
...全文
461 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wenww 2004-12-24
  • 打赏
  • 举报
回复
mathe() 的意思

室不是这样
如果i和j都是100的话也是后面那个快
wenww 2004-12-24
  • 打赏
  • 举报
回复
ti
baryjim 2004-12-23
  • 打赏
  • 举报
回复
原来,我还在汇编里找答案,原来是cache中啊,向高手致敬!!
mathe 2004-12-23
  • 打赏
  • 举报
回复
不要根据循环的长度来判断,这个对代码效率影响太小了,尽信书则不如无书:)
正确的解答是按照代码的内容,主要是做内存方面的优化:
比如下面一个代码:
int a[1000][100];
int i,j;
for(i=0;i<100;i++)
for(j=0;j<1000;j++)a[j][i]=i+j;
速度要远远慢于代码:
for(j=0;j<1000;j++)
for(i=0;i<100;i++)a[j][i]=i+j;
原因很简单,计算机访问内存都是通过Cache间接访问的。而相邻的内存会被安排在
同一条Cache上,所以我们要尽量将相邻的内存中数据的访问放在一起,这样就可以
减少将内存中数据拿到Cache中的次数。
l_b_q 2004-12-22
  • 打赏
  • 举报
回复
【建议4-4-1】在多重循环中,如果有可能,应当将最长的循环放在最内层,最短的循环放在最外层,以减少CPU跨切循环层的次数。

——【高质量C/C++编程指南】
baryjim 2004-12-22
  • 打赏
  • 举报
回复
我想不到有什么区别啊,mark一下

33,027

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧