嗨,大家好抱歉,如果我复制,但我找不到答案。我是初学者,正在寻找更好的解决方案/优化。
我需要为我的等式搜索解决方案。我得到了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]... ){
for(t[1]... ){
for(t[2]... ){
for(t[n]... ){ // do what u have to }}}}
任何优化代码的方法? 提前致谢!
答案 0 :(得分:2)
你可以使用递归,但解决这种线性方程的更快方法是在你有足够的知识后解决它。
你有5个变量乘以5个常数和3个方程。这将是你很多自由度,但是一旦你探索了前两个变量的组合,剩下的变量就可以作为一个线性方程解决,即作为一个矩阵方程。
[ 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)问题空间。