2012-04-21 24 views
5

मैंने एक विशिष्ट कार्यान्वयन के लिए सही संग्रह चुनने के लिए कई लेख पढ़े हैं, और मैं समझता हूं कि अंत में यह वास्तविक डेटा को बेंचमार्क करने के लिए नीचे आ जाएगा, लेकिन जब मैं व्यस्त हूं:संग्रह आइटम को संशोधित करें

  • सी # में किस तरह का संग्रह किया गया संग्रह किसी आइटम में संशोधन की अनुमति देता है? मुझे कोई प्रतीत नहीं होता है?

  • क्या ऐसा इसलिए है क्योंकि एक संशोधित को हटाने के बाद लागू किया जाएगा, फिर पुन: सम्मिलन, इस प्रकार एक स्पष्ट 'संशोधित' फ़ंक्शन व्यर्थ बना रहा है?

मैं एक संग्रह (कस्टम या मानक पुस्तकालय), यह पर प्रदर्शन निम्न कार्रवाई के साथ की जरूरत होती है।

  • सम्मिलित - अक्सर
  • निकालें - अक्सर
  • संशोधित - बहुत बार
  • करें शीर्ष एक्स तत्वों - हर बार उपरोक्त में से किसी से होता है, और अधिक, समवर्ती।

वर्तमान में मैं एक SortedSet उपयोग कर रहा हूँ, के रूप में यह ओ (logn) आवेषण प्रदान करता है, लेकिन मैं हटाने प्रदर्शन और कैसे सबसे अच्छा एक आइटम को संशोधित करने पर स्पष्ट नहीं कर रहा हूँ।

+0

क्या संग्रह को हर समय सॉर्ट करने की आवश्यकता है? यदि आप कई संशोधनों को लागू कर सकते हैं और फिर बाद में सॉर्ट कर सकते हैं तो आपको एक बड़ा प्रदर्शन लाभ मिलेगा। –

+0

@Evenhuis दुर्भाग्यवश हां, क्योंकि एकाधिक 'ग्राहक' इस सूची का अनुरोध करेंगे, और जब भी इस सूची में बदलाव किया जाता है, तो उन्हें क्रमबद्ध क्रम में इसकी आवश्यकता होती है। या कम से कम शीर्ष तत्व। – Vort3x

+0

हमने अपने डेटा संरचना पाठ्यक्रम में एक संतुलित बीएसटी का उपयोग किया। यह बहुत तेज़ था लेकिन हमने इसे सी ++ में कार्यान्वित किया। आप शायद इसे मान सकते हैं। यहां एक अच्छी जानकारी स्रोत है: http: //www.codeproject।कॉम/आलेख/68500/संतुलित-बाइनरी-सर्च-ट्री-बीएसटी-सर्च-डिलीट-प्रिंस –

उत्तर

1

सबसे पहले, हमें संग्रह को संशोधित करने के अर्थ को स्पष्ट करने की आवश्यकता है।

आम तौर पर, संग्रह में हेरफेर करना सूची से आइटम डालने/हटाने का संदर्भ देता है। किसी व्यक्तिगत आइटम को संशोधित करने के लिए, यह मूल रूप से आइटम तक पहुंच रहा है और इसकी गुणों को संशोधित कर रहा है। किसी आइटम तक पहुंचने की लागत संग्रह कार्यान्वयन पर निर्भर करती है, लेकिन आइटम संपत्तियों में संशोधन संग्रह पर निर्भर नहीं है। यह भी ध्यान दें, यदि आप उत्परिवर्तनीय नहीं हैं तो आप संग्रह आइटम को संशोधित नहीं कर सकते हैं।

यदि आप केवल सर्वोत्तम अंतर्निहित संग्रह ढूंढ रहे हैं, तो आप मूल रूप से सॉर्टेडलिस्ट और सॉर्टेडसेट (सॉर्टेड डिक्शनरी सॉर्टेडसेट के समान) के बीच चयन कर रहे हैं।

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

इसके अलावा, दोनों के बीच अंतर काफी छोटा है, क्योंकि वे दोनों लाल ब्लैक ट्री लागू करते हैं, केवल कार्यान्वयन विवरण में भिन्न होते हैं।

वास्तविक प्रदर्शन को आपके उपयोगकर्ता मामलों के लिए मापा जाना होगा। लेकिन आप को यह पहले से ही पता है।

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