本人要实现任意二维数组元素之间按位于,但是三层循环时间花销太大,如何改进此算法??
for(i=0;i<num1;i++)
for(j=i+1;j<num1+1;j++)
{
for(k=0;k<168;k++)
{
temp[k]=(a[i][k]&a[j][k]);
//cout<<temp[k]<<endl;
}
bit(temp,random[i],random[j]);
}
附:int bit(int *b,int i,int j)
{
FILE *p;
p=fopen("2a2dkdata_5.dat","a+");
int k;
fprintf(p,"%8d",i);
fprintf(p,"%8d",j);
for(k=0;k<=167;k++)
fprintf(p,"%8d ",*(b+k));
//cout<<*(b+i-1);
fprintf(p,"\n");
fclose(p);
return 0;
}
[解决办法]
应该没什么巧办法了吧,反正要计算那么多次啊,省不了。。
n*m 的矩阵要计算 (n*m-1)! 次。。
[解决办法]
2个循环就够了吧
把二维数组当成一维数组 循环即可。
[解决办法]
几乎没发优化了。
如果硬要优化,可以这样:
for(i=0;i<num1;i++)for(j=i+1;j<num1+1;j++){ for(k=0;k<168;k++){temp[k]=(a[i][k]&a[j][k]);//cout<<temp[k]<<endl;}}