C++3层循环内部一个小数组的赋值为什么耗时很长?

ylongwu 2013-06-06 01:19:12
	for(int theta=0; theta<360; theta++)
{
for (int imageX=0; imageX<800; imageX++)
{
for (int imageY=0; imageY<800; imageY++)
{
rhoIndex = (*mRhoIndex)(theta, imageX, imageY);
firstRhoIndex = rhoIndex - numOfBinsHalfImagePixelMaps;
lastRhoIndex = rhoIndex + numOfBinsHalfImagePixelMaps;
rhoIndexLen = floor(lastRhoIndex) - floor(firstRhoIndex) + 1;
if(rhoIndexLen>1)
{
mInterpolationFactor[0] = floor(firstRhoIndex + 1) - firstRhoIndex;//这一句耗时最长,去掉之后用时31ms 加上之后耗时4000ms
}
}
}
}


数组的长度大约为4-6之间,为什么给mInterpolationFactor数组赋值语句这么耗时间? 这一句去掉之后,循环耗时31ms 加上之后耗时为4000ms
...全文
429 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
rocktyt 2013-06-06
  • 打赏
  • 举报
回复
我猜测一下去掉这句后很快的原因 去掉之后里面的代码根本就没跑,因为里面的变量没有被用到,所以被编译器优化掉了
armsword 2013-06-06
  • 打赏
  • 举报
回复
o(n*n*n) 复杂度啊,亲!
何哀何欢 2013-06-06
  • 打赏
  • 举报
回复 1
800 X 800 X 360 是多少?自己想去。
疯狂的红豆 2013-06-06
  • 打赏
  • 举报
回复
你这三重循环本来就已经是很大的复杂度了,尽量把不需要再循环内做的事情移到循环外围,还有啊,尽量把循环次数多的放在内层,把循环次数少的放在外层,这个可以减少循环计数器的来回切换
ylongwu 2013-06-06
  • 打赏
  • 举报
回复
引用 2 楼 cnike 的回复:
rhoIndex = (*mRhoIndex)(theta, imageX, imageY);    
            firstRhoIndex = rhoIndex - numOfBinsHalfImagePixelMaps;
            lastRhoIndex = rhoIndex + numOfBinsHalfImagePixelMaps;    
            rhoIndexLen = floor(lastRhoIndex) - floor(firstRhoIndex) + 1; 
            if(rhoIndexLen>1)
            {
               mInterpolationFactor[0] = floor(firstRhoIndex + 1) - firstRhoIndex;//这一句耗时最长,去掉之后用时31ms 加上之后耗时4000ms
            }
这里涉及的计算比较多 你可以把顺寻调整下 把一些计算的步骤 放在外层的循环里面
能放在外层的都尽量放在外层了,里面的计算都是跟循环的相关的
笨笨周0915 2013-06-06
  • 打赏
  • 举报
回复
rhoIndex = (*mRhoIndex)(theta, imageX, imageY);    
            firstRhoIndex = rhoIndex - numOfBinsHalfImagePixelMaps;
            lastRhoIndex = rhoIndex + numOfBinsHalfImagePixelMaps;    
            rhoIndexLen = floor(lastRhoIndex) - floor(firstRhoIndex) + 1; 
            if(rhoIndexLen>1)
            {
               mInterpolationFactor[0] = floor(firstRhoIndex + 1) - firstRhoIndex;//这一句耗时最长,去掉之后用时31ms 加上之后耗时4000ms
            }
这里涉及的计算比较多 你可以把顺寻调整下 把一些计算的步骤 放在外层的循环里面
ylongwu 2013-06-06
  • 打赏
  • 举报
回复
以上是简化之后的程序,源程序还有很多代码。 而且我发现要将循环内的所有关于数组的操作全部屏蔽掉,速度会很快。只要有一句关于数组的赋值,速度就会几百倍地提高

64,439

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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