2016-09-13 68 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

謝謝,這是一個很好的建議! –

相關問題