英語のアルファベットのセットを 26 ビットのビット文字列として表しています。最初のビットは「a」に対応し、セットされたビットは「b」に対応します。したがって、
文字列 ab は 11000000000000000000000000 として表され
ます。ここで、2 つのビット文字列が与えられた場合、ビット文字列 1 がビット文字列 2 のサブセットであるかどうかを確認したいと思います。つまり、ビット文字列 1 が「1」であるすべての場所で、ビット文字列 2 も「1」。これは、string1 のすべての文字が string2 にも存在することを意味します。誰かがこれを行うための最良の方法を教えてもらえますか?
次のような簡単な方法を知っています。ビット string1 を反復処理し、ビット string2 の対応するビットをチェックします。ただし、ビット単位の演算子を使用してより効率的な方法でこれを行うことができるかどうか疑問に思っています
2393 次
2 に答える
12
実際に 26 ビットしか使用していない場合は、整数 (32 ビット) を使用してビットセットを表し、ビットごとの AND (&) 演算子を使用して、2 つのセットの交点を取得できます。
のサブセットでa & b == a
ある場合a
b
于 2012-09-11T07:16:37.903 に答える
0
BitSet
の代わりに使用する場合は、 or演算子byte
を使用できます。and
xor
BitSet
shift
残念ながら、 を除いて、さまざまなビット操作があります。
http://docs.oracle.com/javase/1.4.2/docs/api/java/util/BitSet.html#xor%28java.util.BitSet%29
最初のセットxor
の 2 番目のセットは 0 にする必要があります。
26 文字しか使用しないため、単純なint
. 個々のビットを設定するだけでは、もう少し厄介です。
a |= 1 << offset;
于 2012-09-11T07:15:38.413 に答える