最大でkビットのON(ビット1)(0 < n < = 32および0 < = k < = n)を持つすべてのnビット整数をループする必要があります。たとえば、n = 4およびk = 2の場合、これらの数字は(0000、0001、0010、0100、1000、0011、0101、0110,1001,1010,1100)です。これらの数字の順序はループスルーは重要ではありませんが、それぞれが一度だけ訪問されます。最大kビットをオンにして整数をループする最良の方法は何ですか?
は現在、私はこの単純なアルゴリズムを使用しています:
for x = 0 to (2^n - 1)
count number of bits 1 in x
if count <= k
do something with x
end if
end for
私はそれがあまりにも多くの数字をループに持っているので、このアルゴリズムは非効率的だと思います。例えば、n = 32、k = 2の場合、2^32個の数字をループして、529個の数字(< = 2ビット1)のみを見つける必要があります。
私の質問です:これを行うための効率的なアルゴリズムはありますか?
[ビットのハックは、与えられた数の1を持つすべての整数を生成する](http://stackoverflow.com/questions/8281951/bit-hack-to-generate-all-integers-with-a-given) -number-of-1s) – dasblinkenlight
@dasblinkenlight重複していませんが、類似しています。 – Muhd