解決するアルゴリズム、または少なくとも次の問題の適切な名前を探しています。
ビット文字列のセットBがあります。アルゴリズムは、次のような最小の (「ビット セットが最も少ない」と定義される) ビット文字列Sを見つける必要があります。
Bのすべてのb に対して、となるシフトN ( ℤ</a> 内) が存在します。
(S << N) & b == b
それが役立つ場合、各bは機械語に収まります。ビ| 数百のオーダーです。
Sと各bの LSB は 1 であると (一般性を失うことなく) 仮定できると思います。
これは、ある種の複数の配列アラインメントの問題のように見えます。
B ( i = 1 .. | B |)の各b iに対して各N iを見つけることができれば、 Sはすべてのビットごとの論理和 ( b i >> N i ) のように見えます。
私の直感では、最初のステップは、Bに別のビット文字列cが存在し、そのようなシフトMが存在するBからすべてのbを削除することです。次は何ですか?b & (c << M) == b