2012-09-11 18 views
6

का सबसेट है, मैं 26 बिट बिटस्ट्रिंग के रूप में अंग्रेजी अक्षरों के सेट का प्रतिनिधित्व कर रहा हूं। पहला बिट 'ए' से मेल खाता है, सेट बिट 'बी', और इसी तरह से। इस प्रकार,
स्ट्रिंग अब 11000000000000000000000000
अब के रूप में, यह देखते हुए प्रस्तुत किया जाता है दो बिट श्रृंखला, मैं अगर bitstring 1 2. bitstring के एक सबसेट है यही कारण है की जांच करने के bitstring 1 एक '1', सा गया है सभी स्थानों में चाहते हैं स्ट्रिंग 2 में '1' भी होना चाहिए। इसका मतलब है कि स्ट्रिंग 1 में सभी वर्ण स्ट्रिंग 2 में भी मौजूद हैं। क्या कोई मुझे ऐसा करने का सबसे अच्छा तरीका बता सकता है?
मुझे निम्नानुसार एक सरल तरीका पता है: बिट स्ट्रिंग 1 के माध्यम से पुनरावृत्ति करें और बिट स्ट्रिंग 2 में संबंधित बिट की जांच करें। हालांकि, मैं अगर यह एक अधिक कुशल तरीके सेबिट स्ट्रिंग्स: यह जांचना कि क्या एक बिटस्ट्रिंग किसी अन्य

+0

के एक सबसेट यह कैसे एक 'स्ट्रिंग' के रूप में या एक अभिन्न मूल्य (' Integer') पर कब्जा पहले 26 बिट के रूप में संग्रहीत किया जाता है, है? यदि उत्तरार्द्ध, सरल bitwise संचालन चाल करना चाहिए, और अधिक जटिल .. – Nim

उत्तर

10

आप वास्तव में केवल 26 बिट का उपयोग कर रहे हैं, तो आप bitset प्रतिनिधित्व करने के लिए एक पूर्णांक (32 बिट) का उपयोग कर सकते हैं और bitwise AND (&) ऑपरेटर का उपयोग, दो सेटों के intersection प्राप्त करने के लिए।

तो a & b == a, ab

0

में कुछ बिट बुद्धिमान ऑपरेटर का उपयोग आप byte के बजाय BitSet, आप and या xor ऑपरेटरों इस्तेमाल कर सकते हैं का उपयोग करेंगे तो किया जा सकता है सोच रहा हूँ।

BitSet दुर्भाग्य से shift को छोड़कर, विभिन्न बिट ऑपरेशंस हैं।

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

पहले xor दूसरे सेट 0.

होना चाहिए जब से तुम सिर्फ 26 वर्ण भी उपयोग करते हैं, आप एक सरल int साथ भी ऐसा ही कर सकते हैं, की स्थापना की। बस अलग-अलग बिट्स स्थापित कर रही है थोड़ा अधिक गन्दा:

a |= 1 << offset; 
+0

यह समानता के लिए जांच करता है, सबसेट नहीं! – TimeToCodeTheRoad

+0

सबसेट के लिए 'ए और बी = ए', समानता के लिए 'xor b = 0'। –

संबंधित मुद्दे