大家好,抱歉,如果我重复,但我找不到答案。我是初学者,正在寻找更好的解决方案/优化(如果有)。
我需要为我的方程寻找解。我得到了 table[n]
和 T1[n]
。
table[n]
有 5 个字段loop1、loop2、loop3、Max、Min
T1[table.length]
只是为了保留解决方案
方程必须是:
table[0].loop1*T1[0]+table[1].loop1*T1[1]+...+table[n].loop1*T1[n]=x
table[0].loop2*T1[0]+table[1].loop2*T1[1]+...+table[n].loop2*T1[n]=y
table[0].loop3*T1[0]+table[1].loop3*T1[1]+...+table[n].loop3*T1[n]=z
问题是我得到了所有“静态”的东西,这意味着我为 atm 表的 6 个元素嵌套了循环。这是我的代码。
out :
for ( T1[0]=table[0].Min ; T1[0] <= T1[0].Max; T1[0]+=1) {
for ( T1[1]=table[0].Min ; T1[1] <= T1[0].Max; T1[1]+=1) {
for ( T1[2]=table[0].Min ; T1[2] <= T1[0].Max; T1[2]+=1) {
for ( T1[3]=table[0].Min ; T1[3] <= T1[0].Max; T1[3]+=1) {
for ( T1[4]=table[0].Min ; T1[3] <= T1[0].Max; T1[4]+=1) {
for ( T1[5]=table[0].Min ; T1[4] <= T1[0].Max; T1[5]+=1) {
if (T1[0]*table[0].loop1+...+T1[4]*table[5].loop1=x &&
T1[0]*table[0].loop2+...+T1[4]*table[5].loop2=y &&
T1[0]*table[0].loop3+...+T1[4]*table[5].loop3=z ){
t1.setSolution;
System.out.println("u got it"); break out;
}}}}}}}
问题:
不知道如何(正确的词)动态? table.length 的嵌套循环。意味着我给了他 table[n] 元素,他嵌套了 n 个循环......如果它没有意义的例子。表[n]
for(t[0]...){ 对于(t[1]...){ 为(t[2]...){ for(t[n]... ){//做你必须做的事 }}}}
有什么方法可以优化代码吗? 预先感谢!
最佳答案
您可以使用递归,但解决此类线性方程的更快方法是在有足够的已知知识后求解。
您有 5 个变量,乘以 5 个常数和三个方程。这将为您提供很多自由度,但是一旦您探索了前两个变量的组合,其余变量就可以作为线性方程(即矩阵方程)来求解。
[ T1[2] [ x - T1[0]*table[0].loop1 - T1[1]*table[1].loop1
T1[3] = y - T1[0]*table[0].loop2 - T1[1]*table[1].loop2 * A^-1
t1[4] ] z - T1[0]*table[0].loop3 - T1[1]*table[1].loop3 ]
其中 A^-1 是 T1[2..4] 系数矩阵的逆矩阵
这会将 O(N^5) 问题空间减少到 O(N^2) 问题空间。
关于java - 嵌套循环还是方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28769792/