2016-05-10 40 views
1

3つのランダム変数から高次多項式を計算するアルゴリズムが必要です。 X、Y、Z高次多項式を計算するアルゴリズム(擬似コード)

多項式の次数9までが必要です。

Degree 2: 
X * Y 
X * Z 
Y * Z 
Degree 3: 
X * Y * Z 
X^2 * Y 
X^2 * Z 
Y^2 * X 
Y^2 * Z 
Z^2 * X 
Z^2 * Y 
. 
. 
. 
Degree 9: 
X^3*Y^3*Z^3 
. 
. 
. 

私は3つの内側の "for loop"がこれを解決すると信じていますが、わかりません。 何か助けていただければ幸いです。 ありがとう

+0

何語あなたが実装するために使用している...:ここでは

は、いくつかの擬似コードと一緒に順列を生成するためのヒープのアルゴリズムへのリンクがありますか? – pbreach

+0

言語は重要ではなく、疑似コードで十分です。参照のために私はそれをR – Faridcher

答えて

2

ここではブルートフォースのJavaソリューションです。単に包括9までのすべての指数値を反復処理し、全体的な順序は9

for (int i=0; i <= 9; ++i) { 
    for (int j=0; j <= 9; ++j) { 
     for (int k=0; k <= 9; ++k) { 
      if (i + j + k >= 2 && i + j + k <= 9) { 
       System.out.println("x^" + i + "*y^" + j + "*z^" + k); 
      } 
     } 
    } 
} 

以下である場合、これらの設定を保持することができます。このオーバーRにかなり容易にループする傾向があるが、としてポートRの上で目立つようにするには、おそらくより適切な(そしておそらくもっと速い)方法があります。例えばPythonで

+0

に実装しなければなりません。注文2つの多項式が欠落しています。 最初に計算する順序はx * y * zです。 x^0、y^0、z^0が必要です。 –

+0

@TimBiegeleisenありがとう!これは実際に仕事をしています。強引な力の利点は、あなたがそれについてあまり考える必要がないということです。しかし、これはそれを実装する最も効率的な方法ではありません。これまで最高の答え! – Faridcher

0

私はこのようなものだろう:

from itertools import permutations 

for p in permutations([0,1,2,3] * 3, 3): 

    if sum(p) >= 2: 

     print("x^{} * y^{} * z^{}".format(*p)) 

基本的には、係数[0,1,2,3] * 3のすべての長さ3の順列をループを(0〜3が3回繰り返し)。

https://en.m.wikipedia.org/wiki/Heap%27s_algorithm

+0

これはPythonでも動作しますが、この問題の一般的なアプローチではありません。 'itertools'と' permutations'はすべてのプログラミング言語で利用できるわけではありません。問題は言語特有ではない傾向があります。とにかくありがとう。 – Faridcher

+0

少なくとも誰でも任意の言語で順列アルゴリズムをコード化する方法を調べることができます。さらに、このアプローチは、10または20の変数(10または20ループなし)を容易に拡張します。 – pbreach

関連する問題