一个简单的问题。 问题是求解如下的整数多项式方程:x + y + z = num,并且假设x,y,z的int值如下:X1< = x< = X2,Y1< = y< = Y2,Z1< = z< = Z2,然后找出有多少x,y,z组合来满足该等式。 可能有更有效的算法而不是:
for(int i=X1;i<=X2;i++)
for(int j=Y1;j<=Y2;j++)
for(int k=Z1;k<=Z1;k++)
if(i+j+z==num)
print i,j,k;
我不是要求代码,而是要求创意。 感谢任何提供有用信息的人!
答案 0 :(得分:1)
您的算法在O((X2-X1)(Y2-Y1)(Z2-Z1))时间内运行。
为了使它更快,你可以检查总和是否大于num,如果是,那么你可以弹出你所在的循环并增加下一个更大的循环。例如,Y循环可以读取
for(int j = Y1; j <= Y2; j++){
if(i + j > num){
j = Y2;
continue;
}
for ( int k = Z1;...){...}
}
这会阻止算法测试一些大于num的组合,从而改善运行时间。请注意,您可以对所有三个循环执行此操作,包括仅包含到目前为止已定义的变量(此示例不测试k,因为直到第三个循环才定义k)。