最大でkビットがオン(ビット1)であるすべてのnビット整数をループする必要があります。ここで、0 <n<=32および0<=k<=nです。たとえば、n=4およびk=2の場合、これらの番号は(2進数で)0000、0001、0010、0100、1000、0011、0101、0110、1001、1010、1100です。これらの番号の順序は次のとおりです。ループスルーは重要ではありませんが、それぞれが1回だけ訪問されます。
現在、私はこの単純なアルゴリズムを使用しています。
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の場合、529個の数値(<= 2ビット1)のみを見つけるために、2^32個の数値をループする必要があります。
私の質問は、これを行うためのより効率的なアルゴリズムはありますか?