2016-09-13 118 views
4

我正在编写方程简化程序。在这个程序中想要使用二项式和三项式的定理。如何在没有嵌套循环的情况下实现三项式展开。

随着二项展开式:

(X + Y)^ R

萨姆(K - > R)的x^[RK] Y 1 [k]的

其中k是0并且r是二项的度数。

我能做到这一点是这样的:

for (k=0; k<=r; k++) { 
     x_degree=r-k; 
     y_degree=k; 
    } 

否则,如果我想要实现三叉theoreme我应该满足形式的约束:

(A + B + C)^ N

萨姆(正选择I,J,K)一个^ IB^JC^K,

其中n是DEGR三项的ee和i + j + k = n。

我想了一段时间,但我无法弄清楚通过所有可能的组合的东西比循环更好,具体如下:

for (int i=0; i<=n; i++) 
    for (int j=0; j<=n; j++) 
     for (int k=0; k<=n; k++) { 
      if((i+j+k)==n) { 
       find_coefficient(i,j,k); 
       set_degree_values(i,j,k); 
       proceed(); 
      } 
     } 

所以我的问题是:不用循环如何实现三项式扩张通过所有可能的度数组合?

谢谢。

+3

您可以根据使用1环,而不是2一样二项式使用,而不是3两个循环 – sashas

+0

你究竟想要什么。我无法正确理解你的问题。 – sashas

+0

在您的二项式示例中,您缺少实际进行任何提升和放大的代码。 – jxh

回答

1

以第四度作为一个例子,这三个变量的权力可以被列为

004, 013, 022, 031, 040, 
103, 112, 121, 130, 
202, 211, 220, 
301, 310, 
400 

的逻辑是递减最右边的数字并递增一个其左侧。当后者达到r时,将其增加到左边并重新设置右边的数字(这是一个修改后的进位操作)。

该方案可以通过n计数器实现,并推广到多项式定理。我不会感到惊讶的是,系数也可以递增计算。 (实际上,计数器将模拟嵌套的循环。)

+0

谢谢Mr.Daouts!这是一个很酷的方法。我将尝试以多项式定理的形式实现它。 –

1

您可以删除一个循环很简单如下:

for (int i=0; i<=n; i++) 
    for (int j=0; j<=n-i; j++) { // Note change to upper limit 
     int k = n - i - j;   // Calculate k rather than loop 
     find_coefficient(i,j,k); 
     set_degree_values(i,j,k); 
     proceed(); 
     } 
+0

谢谢,这是一个很好的建议! –

相关问题