私は組み合わせアルゴリズムに関するいくつかの演習を行っており、以下の質問を解決する方法を見つけようとしています:
25 ビットのグループが与えられた場合、15 を設定 (選択) します (順列不可で順序 NON は重要です)。
n!/(k!(n-k)!) = 3.268.760
ここで、これらの可能性のすべてについて、すべての一意の 25 ビット メンバーを他のすべての 25 ビット メンバーと交差させる行列を作成します。その間の関係では、少なくとも 11 個の共通の設定ビット (0 ではなく 1 のみ) が必要です。
それをバイナリ データとして表すことを説明してみましょう。したがって、最初のメンバーは次のようになります。
0000000000111111111111111 (10 zeros and 15 ones) or (15 bits set on 25 bits)
0000000001011111111111111 second member
0000000001101111111111111 third member
0000000001110111111111111 and so on....
...
1111111111111110000000000 up to here. The 3.268.760 member.
これらの値を 1 x 1 の行列に交差させると、15 ビットが共通である必要があります。結果は >= 11 であるため、「有用な」結果です。
1 x 2 の場合、14 ビットが共通であるため、有効な結果も得られます。
すべてのメンバーに対してこれを行うと、最終的に 1 x 3.268.760 を超えると 5 ビットが共通になるため、11 未満であるため「役に立ちません」。
私が必要としているのは、(数学またはアルゴリズムによって) 11 ビット共通のすべての可能性をカバーするために必要なメンバーの最小数を見つけることです。
言い換えれば、他のすべてに対してテストされた場合、3.268.760 x 3.268.760 ユニバース全体で共通する少なくとも 11 ビットを持つ可能性がある N メンバーのグループ。
ブルート フォース アルゴリズムを使用して、81 個の 25 ビット メンバーでこれを達成できることがわかりました。しかし、この数はもっと小さくする必要があると思います (12 に近いもの)。
ブルート フォース アルゴリズムを使用して、3.268.760 を超える 12 メンバーのすべての可能なバリエーションを作成しようとしましたが、可能性の数が非常に多いため、計算に 100 年以上かかります (3,156x10e69 の組み合わせ)。
私は組み合わせ論についてグーグルで調べましたが、これらの問題がどの分野に当てはまるか分からないほど多くの分野があります。
したがって、組み合わせ論のどの分野に関する方向性、またはこれらの問題に対するアルゴリズムは大歓迎です。
PS: 参考までに。2 人のメンバーの「類似度」は、次を使用して計算されます。
(Not(a xor b)) and a
その後、共通ビット数が与えられたビットをカウントするための小さな再帰ループがあります。
編集:約束された (@btilly) 以下のコメントで、関係の「フラクタル」画像または画像へのリンクを次に示します。
カラー スケールの範囲は、赤 (15 ビットが一致) から緑 (11 ビットが一致)、10 ビットより小さい値の場合は黒です。
この画像は、4096 の最初のグループのサンプルです。