(n、r)のランダムな組み合わせのセットを取得する逆二項係数計算を実行しようとしています。次に、セットまたはサブセット内のn-Choose-r(n、r)を決定できる必要があります. たとえば、ユーザーが次のセットを入力した場合: {(1,2,3) (1,2,4) (1,3,4) (2,3,4)}、プログラムは nCr(3,4) を検出する必要があります。
そうするために、まず私は
all_combinations = nCr(subset_length,input_set_length)
この場合は nCr(3,4) = 4 です。
次に、次のように [要素:頻度] の形式で各要素の頻度を計算します。
fs = [1:3], [2:3], [3:3], [4:3]
ついに、
if (length(fs) != all_combinations ) return;
foreach(element in fs)
if( count(fs.elements) != subset_length ) return;
print 'found nCr:' + subset_length + ',' + input_set_length
すべての要素の頻度はサブセットの長さに等しいので、完全な組み合わせセットであると結論付けます。
ただし、複雑なケースを検出することはできないようです。たとえば、次のケースを考えてみましょう。
{(1,2,3) (1,2,4) (1,3,4)}
1 として固定要素があり、サブセットに nCr(3,2) の組み合わせがあることを確認するのは難しくありません。
{(2,3) (2,4) (3,4)}
二項係数を再帰的に検出するより良い方法があるはずです。どんな助けでも大歓迎です。