2012-09-11 25 views
6

alt kümesi olup olmadığını denetleme 26 bit bit dizisi olarak ingilizce alfabe kümesini temsil ediyorum. İlk bit 'a', ayarlanmış bit 'b' ve buna benzerdir. Böylece
dize ab iki bit zincirleri, Şimdi
11000000000000000000000000 olarak temsil verilir, ben 1 Bit dizisi olan 2. Bit dizisi bir alt kümesidir ise 1 '1', bit etti Bit dizisi her yerde, denetlemek istediğiniz Dize 2 de bir '1' olmalıdır. Bu, string1'deki tüm karakterlerin de string2'de mevcut olduğu anlamına gelir. Birisi bana bunu yapmanın en iyi yolunu bilmeme izin verebilir mi?
Aşağıdaki gibi basit bir yol biliyorum: bit string1 üzerinden yineleyin ve bit string2'de karşılık gelen bit'i kontrol edin. Bu yerine byte ait BitSet, sen and veya xor operatörlerini kullanabilirsiniz kullanarak olurduk daha verimli bir şekildeBit Dizeleri: bir bit dizgisinin başka bir

+0

bir alt kümesi, bu bir 'String' veya tamamlayıcı bir değer (' Integer') ilk 26 biti işgal etmektedir olarak depolandığı nasıl? İkincisi, basit bitwise işlemleri hile yapmak gerekir, daha karmaşık .. – Nim

cevap

10

Eğer gerçekten Bit kümesiyle temsil etmek bir tamsayı (32 bit) kullanın ve bitwise AND (&) operatörünü kullanabilirsiniz sadece 26 bit kullanıyorsanız, iki kümenin intersection elde etmek için.

a & b == a ise, ab

0

bazı biraz akıllıca operatörü kullanılarak yapılabilir, ancak ben merak ediyorum. Ne yazık ki, shift hariç, çeşitli bit işlemlerine sahiptir.

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

Önce sadece çok, basit int Aynı işlemleri 26 karakter kullandığından xor ikinci seti 0'a

olmalıdır ayarlayın. Sadece biraz daha dağınık bireysel bit olduğunu ayarı:

a |= 1 << offset; 
+0

bu eşitlik değil, alt kümeleri kontrol eder! – TimeToCodeTheRoad

+0

Alt kümesi için a ve b = a, eşitlik için 'xor b = 0'. –

İlgili konular