2010-03-01 17 views
7

परिदृश्य पर विचार करें मैं इनजावा में bitmask आपरेशन

अमेज़न -1

वॉलमार्ट -2

लक्ष्य -4

कॉस्टको -8

तरह सौंपा मान

बीजेएस -16

डीबी में, डेटा प्रत्येक उत्पाद के लिए उनकी उपलब्धता के आधार पर इन मूल्यों को मास्क करके संग्रहीत किया जाता है। जैसे।,

मास्क उत्पाद विवरण

1 लैपटॉप अमेज़न में उपलब्ध है अमेज़न और बीजे में

17 iPhone उपलब्ध कॉस्टको में

24 गद्दे उपलब्ध और बीजे के

इन सभी उत्पादों की तरह मास्क हैं डी और डीबी में संग्रहित।

मैं सभी नकाबपोश मूल्य के आधार पर खुदरा विक्रेताओं कैसे पुनः प्राप्त करते हैं।, जैसे।, गद्दे के लिए नकाबपोश मूल्य 24. फिर मैं कैसे मिलेगा है या सूची कॉस्टको & बी.जे. के प्रोग्राम के रूप में। किसी भी एल्गोरिदम/तर्क की अत्यधिक सराहना की जाएगी। ऊपर बिट्स

+0

क्या यह निश्चित रूप से जावा कोड में करना है जो इसे अपने डेटाबेस क्वेरी के हिस्से के रूप में करने के विरोध में है? आमतौर पर यह मामला है कि डेटाबेस क्वेरी में फ़िल्टरिंग अधिक कुशल है ... –

उत्तर

9
int mattress = 24; 
int mask = 1; 
for(int i = 0; i < num_stores; ++i) { 
    if(mask & mattress != 0) { 
     System.out.println("Store "+i+" has mattresses!"); 
    } 
    mask = mask << 1; 
} 

if बयान लाइनों, गद्दा मूल्य मुखौटा सेट है, तो दुकान जिसका मुखौटा है कि गद्दे बेचता रूप में एक ही सा है या नहीं। गद्दे मूल्य और मास्क वैल्यू का एक और जब स्टोर गद्दे बेचता है तो केवल शून्य होगा। प्रत्येक पुनरावृत्ति के लिए हम मास्क बिट को एक स्थान बाईं ओर ले जाते हैं।

ध्यान दें कि मुखौटा मान सकारात्मक होना चाहिए, नकारात्मक नहीं, यदि आवश्यकता हो तो आप ऋणात्मक रूप से गुणा कर सकते हैं।

+0

परिणाम समान है यदि आप चर 'मास्क' का उपयोग नहीं करते हैं और इसके बजाय 'if' कथन को बदलते हैं "if (1 << i और गद्दे! = 0) – vedant1811

1

मान लें कि आप SQL डेटाबेस में हैं, फिर अपने पुनर्प्राप्ति एसक्यूएल में, आप आमतौर पर उदा। कहां (माईफिल्ड और 16) = 16, जहां (माईफिल्ड और 24) = 24 आदि

हालांकि, ध्यान दें कि यदि आप इस तरह के पुनर्प्राप्ति को अनुकूलित करने का प्रयास कर रहे हैं, और आम तौर पर एक क्वेरी से मेल खाने वाली पंक्तियों की संख्या बहुत छोटी है पंक्तियों की कुल संख्या, तो शायद यह इस डेटा का प्रतिनिधित्व करने का एक बहुत अच्छा तरीका नहीं है। उस स्थिति में, एक अलग "उत्पादस्टोर" तालिका होना बेहतर होगा जिसमें इस जानकारी का प्रतिनिधित्व करने वाले उत्पाद (स्टोर आईडीआईडी) जोड़े शामिल हैं (और StoreID पर अनुक्रमित)।

1

क्या ऐसे दो खुदरा विक्रेताओं में हैं जिनकी सूची प्रत्येक मामले में "मुखौटा" मूल्य के बराबर है? यदि ऐसा है तो आपको अभी भी उन्हें पुनः प्राप्त करने के लिए सभी जोड़े की जांच करनी होगी, जिसमें एन² का समय लगेगा। बस एक नेस्टेड पाश का उपयोग करें।

यदि मान किसी भी खुदरा विक्रेताओं की सूची का योग दर्शाता है, तो आप subset-sum समस्या को हल करने का प्रयास करने का प्रयास कर रहे हैं, इसलिए दुर्भाग्यवश आप इसे 2^n समय से बेहतर तरीके से नहीं कर सकते हैं।

यदि आप खुदरा विक्रेताओं को योग में योगदान देने के लिए जानकारी के साथ अपनी मूल डेटा संरचना में वृद्धि करने में सक्षम हैं, तो यह आदर्श होगा। लेकिन चूंकि आप सवाल पूछ रहे हैं, मुझे लगता है कि आपके पास डेटा संरचना के दौरान पहुंच नहीं है, इसलिए यह जांचने के लिए खुदरा विक्रेताओं के सभी सबसेट जेनरेट करने के लिए आप Knuth's algorithm [पीडीएफ] को सभी के- संयोजन (और इसे 1 ... के लिए चलाएं) TAOCP वॉल्यूम 4 ए सेक 7.2.1.3 में दिया गया।

0

http://www.antiifcampaign.com/

इस याद रखें। यदि आप किसी अन्य निर्माण (मानचित्र/रणनीति पैटर्न) के साथ "अगर" को हटा सकते हैं, तो मेरे लिए आप इसे वहां दे सकते हैं, अन्यथा "अगर" वास्तव में खतरनाक है !! (एफ। कैरिलो)

इस मामले में आप बिटमैस्क ऑपरेशन के साथ मानचित्र के मानचित्र का उपयोग कर सकते हैं।

लुका।

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