2012-09-11 24 views
6

Represento el conjunto de alfabetos ingleses como una cadena de bits de 26 bits. El primer bit corresponde a 'a', el bit configurado a 'b', y así sucesivamente. Por lo tanto,
La cadena ab se representa como 11000000000000000000000000
Ahora bien, dado dos cadenas de bits, quiero comprobar si bitstring 1 es un subconjunto de la cadena de bits 2. Es decir, en todos los lugares bitstring 1 tiene un '1', el bit la cadena 2 también debería tener un '1'. Esto significa que todos los caracteres en string1 también están presentes en string2. ¿Alguien puede decirme la mejor manera de hacer esto?
Sé de una manera simple de la siguiente manera: recorrer el bit de la cadena 1 y verificar el bit correspondiente en el bit de la cadena2. Sin embargo, me pregunto si esto se puede hacer uso de algún operador poco sabia de una manera más eficienteCadenas de bits: verificando si una cadena de bits es un subconjunto de otra

+0

¿Cómo se almacena, como una 'string' o como un valor integral (' Integer') que ocupan los primeros 26 bits? En este último caso, las operaciones simples a nivel de bitácora deberían hacer el truco, de lo contrario, más complicado ... – Nim

Respuesta

10

Si realmente está utilizando sólo 26 bits puede utilizar un número entero (32 bits) para representar el bitset, y el uso de la (&) operador bitwise AND, para obtener el intersection de los dos conjuntos.

Si a & b == a, a es un subconjunto de b

0

Si estaría utilizando BitSet en lugar de byte, se puede utilizar el and o xor operadores.

BitSet tiene varias operaciones de bits, excepto por shift, desafortunadamente.

http://docs.oracle.com/javase/1.4.2/docs/api/java/util/BitSet.html#xor%28java.util.BitSet%29

primer conjunto xor segundo conjunto debe ser 0.

Dado que sólo utiliza 26 caracteres, se puede hacer lo mismo con una simple int, también. Sólo la creación de los bits individuales es un poco más complicado:

a |= 1 << offset; 
+0

¡esto verifica la igualdad, no el subconjunto! – TimeToCodeTheRoad

+0

Para el subconjunto use 'a y b = a', para igualdad' a xor b = 0'. –

Cuestiones relacionadas