Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 嵌套循环还是方法?_Java_Loops_Methods_Nested - Fatal编程技术网

Java 嵌套循环还是方法?

Java 嵌套循环还是方法?,java,loops,methods,nested,Java,Loops,Methods,Nested,嗨,伙计们,对不起,如果我重复了,但我找不到答案。我是一个初学者,正在寻找更好的解决方案/优化(如果有的话)。 我需要寻找方程的解。我得到了表[n]和T1[n] 表[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].

嗨,伙计们,对不起,如果我重复了,但我找不到答案。我是一个初学者,正在寻找更好的解决方案/优化(如果有的话)。 我需要寻找方程的解。我得到了
表[n]
T1[n]

表[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;
}}}}}}}
out:

对于(T1[0]=表[0].Min;T1[0]您可以使用递归,但求解此类线性方程的更快方法是在您有足够的知识后求解它

你有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)问题空间。

你要找的词是递归,这将允许动态嵌套。用递归函数重写你的程序,这就是你需要的}而且你不需要迭代最后的值,也就是说,T1[5]可以计算出来。(事实上,用三个方程可以计算出最后三个值)在大多数情况下,任何O(N^2)的解都可以通过递归来简化。或者至少可以转化为O(N)。这可以通过你的例子来实现吗?@EvanBechtol如果一个解可以简化为O(N),那么它就是O(N)解。O(N^2)解决方案不能减少。你的意思是,使用递归,你可以有一个循环,它会用第二个循环重新诅咒一个方法吗?不,我的意思是,如果你有一个算法,它的时间复杂度为O(N^2),那么通过递归,复杂度极有可能降低到O(N)。这更好地解释了我的问题:@EvanBechtol使用递归可以得到更自然的问题描述,但它与性能无关。有一些方法可以提高动态编程的性能,但即使您不使用动态编程,这些技术也能起作用。