0 から n-1 までの値の 'nCk' の組み合わせに対応する値にメモリ (静的ハードウェア) を割り当てるためのメモリ アドレス指定方法を見つける必要があります。
「n」を 6、「k」を 4 とすると、組み合わせに対応する値 (8 ビットまたは 16 ビット) を格納する必要があります。
(1,2,3,4) (1,2,3,5) (1,2,3,6) (1,2,4,5) (1,2,4,6) (1,2,5,6) (1,3,4,5) (1,3,4,6) (1,3,5,6) (1,4,5,6) (2,3,4,5) (2,3,4,6) (2,3,5,6) (2,4,5,6) (3,4,5,6)
「k」(ここでは 4) の数字を取得したら、「k」タプルに対応する要素に直接アクセスできるはずです。
k タプルの下位のインデックスは上位のインデックスよりも小さくなり、どのインデックスも等しくありません。
検索せずにそのようなデータを格納および取得するためのアドレス指定スキームを生成することは可能ですか? これは、アドレスが生成され、可能な限り最小限のメモリ量で、最小限の計算で実行する必要があります。(方法に関係なく多少のメモリは無駄になると思います。)
さまざまなインデックスに対してさまざまな定数を使用する線形ハッシュを考えましたが、それは多くのメモリ損失や、定数を計算するための計算の複雑さにつながります。
この問題に関する提案は非常に役立ちます。
例:
(組み合わせ -> メモリ内の対応する値)
([(1,2,3,4)->14], [(1,2,3,5)->3], [(1,2,3,6)->-4], [(1,2,4,5)->7], [(1,2,4,6)->22], [(1,2,5,6)->-11], [(1,3,4,5)->5], [(1,3,4,6)->3], [(1,3,5,6)->-1], [(1,4,5,6)->9], [(2,3,4,5)->35], [(2,3,4,6)->4], [(2,3,5,6)->7], [(2,4,5,6)->-2], [(3,4,5,6)->6])
上記のモジュールへの入力が (2,3,5,6) の場合、値 (7) を直接取得できるはずです。
編集:「n」と「k」は常に偶数です。