Sto rappresentando l'insieme di alfabeti inglesi come una stringa di bit a 26 bit. Il primo bit corrisponde a 'a', il bit impostato a 'b' e così via. Così,
La stringa di ab è rappresentato come 11000000000000000000000000
Ora, dato due stringhe di bit, voglio verificare se stringa di bit 1 è un sottoinsieme di stringa di bit 2. Che è, in tutti i luoghi stringa di bit 1 ha un '1', po la stringa 2 dovrebbe anche avere un '1'. Ciò significa che tutti i caratteri in stringa1 sono presenti anche in stringa2. Qualcuno può per favore farmi sapere il modo migliore per farlo?
Conosco un modo semplice come segue: iterare attraverso il bit string1 e controllare il bit corrispondente nel bit string2. Tuttavia, mi chiedo se questo può essere fatto utilizzando alcuni po 'operatore di saggio in modo più efficienteStringhe di bit: verifica se una bit-string è un sottoinsieme di un'altra
risposta
Se davvero si utilizza solo 26 bit, è possibile utilizzare un numero intero (32 bit) per rappresentare il bitset, e utilizzare l'operatore bitwise AND (&), per ottenere il intersection dei due set.
Se a & b == a
, a
è un sottoinsieme di b
Se si sarebbe utilizzando BitSet
invece di byte
, è possibile utilizzare il and
o xor
operatori.
BitSet
ha varie operazioni di bit, ad eccezione di shift
, sfortunatamente.
http://docs.oracle.com/javase/1.4.2/docs/api/java/util/BitSet.html#xor%28java.util.BitSet%29
primo set xor
seconda serie dovrebbe essere 0.
Dal momento che si usa solo 26 caratteri, si può fare lo stesso con un semplice int
, anche. Basta impostare i singoli bit è un po 'più disordinata:
a |= 1 << offset;
questo controlla per l'uguaglianza, non sottoinsieme! – TimeToCodeTheRoad
Per l'uso secondario 'a e b = a', per l'uguaglianza' a xor b = 0'. –
- 1. QTP: Verifica se una serie di stringhe contiene un valore
- 2. Python: verifica se un dizionario è un sottoinsieme di un altro dizionario più grande
- 3. Come si verifica se un array è un sottoinsieme di un altro?
- 4. Tornando un sottoinsieme di stringhe da 10000 stringhe ASCII
- 5. MATLAB array di celle di ricerca per sottoinsieme di stringhe
- 6. Verifica se l'app è costruita a 32 o 64 bit?
- 7. Trova se uno mappa è sottoinsieme di un altro
- 8. Conversione sottoinsieme di stringhe di numeri interi in un elenco
- 9. IOS: verifica se una stringa è una stringa vuota
- 10. Minimal unione insieme bitstring con turni algoritmo
- 11. Controllare se array di celle è un sottoinsieme di un nother in Matlab
- 12. Ruby Verifica se una stringa include stringhe multi-differenti?
- 13. Come leggere il file completo con bitstring
- 14. Verifica se una colonna NON è NULL
- 15. Ruby: verifica se una porta è aperta
- 16. Verifica se una stringa python è stampabile
- 17. Verifica se una condizione è falsa
- 18. Verifica se una costante è già definita
- 19. Verifica se un NSDate è maggiore di un altro
- 20. Verifica se un elemento è figlio di un genitore
- 21. Verifica se una funzione std :: è assegnata a un nullptr
- 22. Come convertire un sottoinsieme di intervalli di bit in un set di bit C++ in un numero?
- 23. Mappare un sottoinsieme di una variante polimorfica
- 24. Verifica se un'annotazione è di un tipo specifico
- 25. Verifica se BigDecimal è un valore intero
- 26. Verifica se un intero è compreso nell'intervallo
- 27. Python: verifica se il punto è all'interno di un poligono
- 28. Verifica se è disponibile un modulo node.js
- 29. Sourcetree: verifica se un ramo è unito
- 30. Verifica se stdin è vuoto
Come è memorizzato, come 'STRING' o come valore integrale (' Integer') che occupa i primi 26 bit? Se quest'ultimo, le operazioni bitwise semplici dovrebbero fare il trucco, altrimenti più complicato .. – Nim