特定のハミング重みで固定サイズの 2 進数のすべての順列を計算するアルゴリズムが必要です。たとえば、ハミングの重みが 2 で、バイナリ サイズが 4 の場合、次の出力があります。
0011
0110
0101
1100
1010
1001
C(n,r)
このような組み合わせの数は、この例のように 6 で計算されC(4,2)
ます。
数値を 0 から 2^n に増やすだけでこれを解決できることに注意して、カウントが問題ないかどうかを確認してください。ただし、これは迅速な解決策ではありません。C++ で bitset クラスを使用して問題を解決することを検討しており、N を増やす必要があります。
この問題には明らかな再帰アルゴリズムがあることを付け加えたいと思います。スタックオーバーフローのため、良い答えではありません。ゴスパーのハックからここで良い答えを受け取りました。入力をスケールアップする必要があり、後で MPI 実装を使用する可能性がありますが、スケーラブルなライブラリが必要です。unsigned int は十分に大きくないので、bitset のようなスケーラブルで高速なライブラリが必要です。ビットセット ライブラリに追加がないため、ソリューションはここでは適用できません。他の解決策はありますか?