java - 嵌套循环还是方法?

标签 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]...){ 对于(t[1]...){ 为(t[2]...){ for(t[n]... ){//做你必须做的事 }}}}

  2. 有什么方法可以优化代码吗? 预先感谢!

最佳答案

您可以使用递归,但解决此类线性方程的更快方法是在有足够的已知知识后求解。

您有 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/

相关文章:

java - 如何在没有 Spring 和 hibernate 日志的情况下使用 log4j 登录文件

java - 无法使用hibernate连接到mysql

javascript - Angular - For 循环 HTTP 回调/ promise

在循环内定义的 Java 变量似乎在循环外无法识别?

Java 方法重载最佳实践

java - 用于调试目的的简单 Java 警报

algorithm - 以预定义比率循环遍历服务器的 Go 算法

java - 让方法修改引用而不是新对象

java - 如何将JTextField变成String/Long?

java - 使用 3d 变换矩阵