读书人

不得已提问 for 速度优化贵鸟留步

发布时间: 2013-04-05 10:24:33 作者: rapoo

不得已,提问 for 速度优化,贵鸟留步
for(jj=0;jj<16;jj++)
for(dd=15;dd<25;dd++)
for(vv1=0;vv1<9;vv1++)
for(vv2=0;vv2<9;vv2++)
for(vv3=0;vv3<9;vv3++)

for(cc1=0;cc1<8;cc1++)
for(cc2=0;cc2<8;cc2++) // 1 day
{ for(cc3=0;cc3<8;cc3++) // 3 h 10 min
for(cc4=0;cc4<8;cc4++)
for(cc5=0;cc5<8;cc5++)
for(cc6=0;cc6<8;cc6++)
for(cc7=0;cc7<8;cc7++)
for(cc8=0;cc8<8;cc8++)
for(cc9=0;cc9<8;cc9++)
{
for(i=10;i<=m_number;i++)
{
for(j=1;j<=16;j++)
{
num=j;II[i].n_k[num]=(abs((x1*II[i].n[cc1]+x2*II[i-...
num=j+16;II[i].n_k[num]=(abs((x1*II[i].n[cc1]+x2*II[i-...
...
...
num=j+304;II[i].n_k[num]=(abs((x1*II[i].n[cc1]+x2*II[i-2]....
}
for(j=1;j<321;j++)
if(II[i].n_k[j]==II[i+1].n[7])
sure[j]++;
}

for(j=1;j<321;j++)
{
if(sure[j]<7&&sure[j]>1){k=j%...+;}
sure[j]=0;
}
}
//存储为txt
data.Format("F:\\...vv1,vv2,vv3);
if(File.Open(data,CFile::...modeWrite))
{
File.Write(kk1,kk1.GetLength());
File.Close();
}
}


程序段如上,for循环多层嵌套,其中运行 cc3 循环层时已经 3小时10分钟,cc2 运行完 1 天,依次可知整个程序运行完需要几年,程序没有可删的了(部分因为篇幅排版用“...”代替,m_number为480左右)



请问高人,我怎么进行优化,能在两个月内跑完程序,相当实用的问题,如果有有效方法,今后会有重谢
[解决办法]

引用:
引用:这个有什么用处啊 没看懂
我说是彩票预测程序 你信么?谢谢关注哈
我信
类似的东西我做过
因为是排列组合算法没法精简
遇到这种问题首先确定耗时操作再哪里
然后有针对性的设计解决方案
基本就是先把所有的功能代码拿掉空跑for循环
你会发现速度其实很快的
所以其实不是循环本身的问题
然后加功能语句看看延时情况
最后确定位置再想优化的办法或规避的策略
[解决办法]
有一个CPU并行处理,只要增加宏定义,可以解决多个CPU同时运行的问题。

另外,你的File.Write(kk1,kk1.GetLength()); 不会在循环里面吧?
[解决办法]
引用:
有一个CPU并行处理,只要增加宏定义,可以解决多个CPU同时运行的问题。

另外,你的File.Write(kk1,kk1.GetLength()); 不会在循环里面吧?


你的程序是在一个CPU运行1年,按照我的方法,在16核CPU跑,差不多一个1月吧

读书人网 >VC/MFC

热点推荐