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使用递归可以得到更自然的问题描述,但它与性能无关。有一些方法可以提高动态编程的性能,但即使您不使用动态编程,这些技术也能起作用。