長さがn
で、ビットがm
の固定であるすべてのバイナリ文字列を見つけるには、高速な方法が必要です。例えば、std:map
をキーで固定ビットの位置とし、固定ビットの値をとる互換性のある機能であるC++11
がある。 std::bitset<n>
またはstd::vector<n>
のベクトルを出力すると良いでしょう。例えば機能:たとえば長さnの可能なすべてのバイナリ文字列と特定の位置のビットを固定
std::vector< std::bitset<n> > compatible(int n, const std::map<int,bool>& fix)
n=3
あれば、我々は答えは順序が重要ではありません
{{0,1,0},{0,1,1},{1,1,0},{1,1,1}}
である必要があり、その後1への第2ビットを修正。
他のデータ構造がはるかに速い場合、私はスピードを優先します。また、もしも64ビットアーキテクチャ上でかなりのスピードアップが達成できれば、n < 50
それはまた興味深いでしょう。