嵌套循环或方法?

时间:2015-02-27 16:30:46

标签: java loops methods nested

嗨,大家好抱歉,如果我复制,但我找不到答案。我是初学者,正在寻找更好的解决方案/优化。 我需要为我的等式搜索解决方案。我得到了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;
}}}}}}}

问题:

  1. 不知道(正确的词)是如何动态的? table.length的嵌套循环。意思是我给他table [n]元素并且他嵌套n循环...如果它没有意义的例子。表[N]

    for(t[0]... ){ for(t[1]... ){ for(t[2]... ){ for(t[n]... ){ // do what u have to }}}}

  2. 任何优化代码的方法? 提前致谢!

1 个答案:

答案 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)问题空间。