質問

問題

私は(最上位ビットがとにかく設定されることはありません、問題ではありません符号付きまたは符号なし)と各番号はビットセットの与えられた数を持っている必要があります32ビット番号を作成する必要があります。

ナイーブソリューション

最も簡単な解決策は、ゼロの数で開始することは勿論です。ループ内の数は現在1だけ増加され、ビット数がカウントされるカウント値が所望の値を有する場合ではないループだけ繰り返される場合、数は、リストに格納されています。十分な数が発見された場合はループが停止しています。もちろん、これはうまく動作しますが、希望のビット数が非常に高くなったら、それはとても遅いです。

Aよりよい解決策

5ビットが設定(のは言わせて)を有する最も単純な数は、第5ビットが設定されている数です。この数は、簡単に作成することができます。ループ内の最初のビットがセットされ、数は、一つだけ左にシフトします。このループは5回実行され、私は設定5ビットと最初の番号を見つけました。数字の次のカップルは、同様に簡単に作成できます。私たちは今、数は6ビット幅と最高の1が設定されていないふりをします。今、私たちは右に最初のゼロビットをシフトし始めるので、我々は我々が前に別の0を追加し、このプロセスを繰り返すことによって、これを繰り返すことができ101111、110111、111011、111101、111110.を取得します。 0111110、1011110、1101110、などしかし、そのように番号が、我々は1010111のような数字を残して、この単純なアプローチを使用して、必要以上にはるかに速く成長します。

だから、次の番号は、我々が設定する必要がどのように多くのセットのビットにかかわらず、持っているとされますどのように多くのビット?かかわらず、使用可能なすべての順列を作成するためのより良い方法、一般的なアプローチがある。

scroll top