binomial coefficientのnとkの計算方法を知っています(それにライブラリを使用しています)。 これらの組み合わせをすべて配列内に格納するとします。各組み合わせにはインデックスがあります。実際に配列に格納する必要はありませんが、配列を格納する場合は配列のインデックスはどの組み合わせになるのかを知る必要があります。配列の組み合わせインデックスのアルゴリズム
など。可能な組み合わせのC(n、k)集合の要素が与えられていれば、実際に配列全体を作成することなく、配列内にそのインデックスiを与える関数が必要です。プログラミング言語は問題ではありませんが、私はこの関数をjavaで実装する必要がありますが、任意の(擬似)言語アルゴリズムはそれをjavaに変換します。
例えば、N = 5、K = 2の場合には、私が経験的に、この機能f(n, k, [a,b]) => N
を定義:
f(5, 2, [1,2]) = 0
f(5, 2, [1,3]) = 1
f(5, 2, [1,4]) = 2
f(5, 2, [1,5]) = 3
f(5, 2, [2,3]) = 4
f(5, 2, [2,4]) = 5
f(5, 2, [2,5]) = 6
f(5, 2, [3,4]) = 7
f(5, 2, [3,5]) = 8
f(5, 2, [4,5]) = 9
は。 、[1,2,3]上記の例では
、[2,4:N = 5、K = 3の他の例は、経験的に
f(5, 3, [1,2,3]) = 0
f(5, 3, [1,2,4]) = 1
f(5, 3, [1,2,5]) = 2
f(5, 3, [1,3,4]) = 3
f(5, 3, [1,3,5]) = 4
f(5, 3, [1,4,5]) = 5
f(5, 3, [2,3,4]) = 6
f(5, 3, [2,3,5]) = 7
f(5, 3, [2,4,5]) = 8
f(5, 3, [3,4,5]) = 9
コメント後の明確化のためEDITとして定義され、f(n, k, [a,b,c]) => N
あります5]などは、C(n、k)集合の要素の1つです。 n個の可能な番号のうちのk個の数字の可能な組合せの1つ。この関数は配列内のインデックスを計算するために関数を必要とします。
しかし、この関数はnとkの一般的な値と、配列を作成しないで書く必要があります。おそらく、このような関数がいくつかのコンビナトリアル計算ライブラリに既に存在しているかもしれませんが、私はそれがどのように呼び出されるか分かりません。
ヒント:配列要素の数は '(n *(n-1))/ 2'です – wildplasser
@wildplasserいいえ、私は恐れています。配列内の要素の数は、nおよびkの2項係数である。 n!/(k!(n-k)!) –
配列の* contents *について話しています。私はあなたの場合(5 * 4/2)の配列の*サイズ*(:要素の数)について話していましたが、10です。 – wildplasser