क्या डेटा संरचना कुशलतापूर्वक पूर्णांक श्रेणियों को संग्रहीत करेगी?


10

मुझे 0 से 65535 की सीमा में पूर्णांक पर एक संग्रह रखने की आवश्यकता है ताकि मैं निम्नलिखित कार्य शीघ्रता से कर सकूँ:

  • एक नया पूर्णांक डालें
  • सन्निहित पूर्णांकों की एक श्रृंखला डालें
  • एक पूर्णांक निकालें
  • पूर्णांक के नीचे सभी पूर्णांक निकालें
  • यदि कोई पूर्णांक मौजूद है तो परीक्षण करें

मेरे डेटा में वह संपत्ति है जिसमें अक्सर संग्रह में पूर्णांकों के रन होते हैं। उदाहरण के लिए, संग्रह समय के एक बिंदु पर हो सकता है:

{ 121, 122, 123, 124, 3201, 3202, 5897, 8912, 8913, 8914, 18823, 18824, 40891 }

सबसे सरल तरीका सिर्फ संतुलित द्विआधारी पेड़ का उपयोग करना है जैसे कि C ++ std :: set, हालांकि, इसका उपयोग करते हुए, मैं इस तथ्य का लाभ नहीं उठा रहा हूं कि मेरे पास अक्सर संख्याओं के रन हैं। शायद रेंज के संग्रह को स्टोर करना बेहतर होगा? लेकिन इसका मतलब है कि एक सीमा को तोड़ने में सक्षम होने की आवश्यकता है यदि इसके मध्य में एक पूर्णांक हटा दिया जाता है, या एक साथ जुड़ जाता है यदि दो श्रेणियों के बीच का स्थान भरा हुआ हो।

क्या कोई मौजूदा डेटा संरचनाएं हैं जो इस समस्या के लिए अच्छी तरह से अनुकूल होंगी?

जवाबों:


9

मेरा सुझाव है कि आप एक द्विआधारी खोज पेड़ का उपयोग करें, संवर्धित ताकि पत्तियों में एक अंतराल (लगातार पूर्णांक का एक रन) हो सके। अपरिवर्तनीय को बनाए रखें कि अंतराल ओवरलैप नहीं करते हैं और क्रम में हैं (खोज ट्री इनवेरिएंट के बाद)। (यह विशेष मामले के लिए एक अंतराल पेड़ या एक खंड वृक्ष का विशेष मामला माना जा सकता है, जहां अंतराल ओवरलैप नहीं होता है।)

हे(एलजीn)nn65535हे(एलजीn)


5

सबसे पहले, आपका प्रश्न बहुत खराब शब्दों में है, यदि कोई अन्य कारण नहीं है क्योंकि "जल्दी" का अर्थ बहुत अधिक नहीं है। आपको "त्वरित" साधन के कुछ मीट्रिक प्रदान करने की आवश्यकता होगी।

इससे परे, जब किसी समस्या के लिए एक डिज़ाइन के साथ आने की कोशिश की जाती है, तो आपको पहले समस्या को अच्छी तरह से समझने और बहुत सारे अतिरिक्त प्रश्न पूछने की आवश्यकता होती है। इस मामले में प्रासंगिक प्रश्न (किसी विशेष क्रम में) प्रतीत होंगे:

  • क्या इन सभी कार्यों को समान रूप से त्वरित होना चाहिए, या दूसरों की तुलना में कुछ अधिक महत्वपूर्ण हैं?
  • क्या अन्य विचार हैं?
  • क्या स्मृति एक चिंता है?
  • कई थ्रेड्स से सम्मिलन, निष्कासन और लुकअप करने की क्षमता एक चिंता का विषय है?
  • क्या कार्यभार ज्यादातर डालने पर केंद्रित है? निकाला जा रहा है? उपर दॆखना?

[0,65535]

थोड़ा और अधिक काम के लिए, आप अंतरिक्ष पर बचत कर सकते हैं यदि यह चिंता का विषय है, गति पर डेटा को 8192 पूर्णांक में बिट्स के रूप में संग्रहीत करके। यद्यपि वैचारिक रूप से एकल पूर्णांक संचालन अभी भी निरंतर समय होगा और पूर्णांक का संचालन अभी भी रैखिक समय होगा, वे धीमे होंगे।

इसलिए, यदि यह वास्तव में आपकी समस्या है, तो मैं कहूंगा कि एक सरणी का उपयोग करें और कोड के साथ अन्य, अधिक महत्वपूर्ण चीजों पर जाएं।

[0,65535]


3

यू={0,...,यू-1}हे(लॉगलॉगयू)

आपके डेटा की संरचना के आधार पर आपके डेटा को संग्रहीत करने के लिए कई चतुर विकल्प हो सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.