2009-11-09 16 views
9

मैं सी # में एक Red-Black Tree के एक कार्यान्वयन के लिए देख रहा हूँ, निम्न सुविधाओं के साथ:कार्यान्वयन

  • खोजें, सम्मिलित करें और ओ में हटाएं (लॉग एन)।
  • सदस्य का प्रकार सामान्य होना चाहिए।
  • Comparer(T) में समर्थन, T को विभिन्न क्षेत्रों में सॉर्ट करने के लिए।
  • पेड़ में खोज विशिष्ट फ़ील्ड के साथ होना चाहिए, इसलिए यह T स्वीकार नहीं करेगा, लेकिन यह फ़ील्ड प्रकार को सॉर्ट कर देगा।
  • खोज केवल सटीक मूल्य नहीं होना चाहिए। कम/उच्च एक को खोजने का समर्थन करना चाहिए।

धन्यवाद।

+1

"पुस्तक या शिक्षक" नामक आपके अन्य प्रश्न का उत्तर देने के लिए, * वास्तव में * प्रोग्रामिंग सीखने का सबसे अच्छा तरीका * लिखना प्रोग्राम * है। इसे अपने आप लिखें और फिर आप कुछ सीखेंगे। –

+1

@ पावेल: मैं इसे लिख सकता हूं, लेकिन मैं कुछ तैयार करने की तलाश में हूं, इसलिए मैं अपने कार्यक्रम के मुख्य पक्षों को विकसित करना जारी रख सकता हूं, और विकास को तेज कर सकता हूं। –

उत्तर

12

आप अधिकतर निम्नतम/अगली-उच्चतम मूल्य बाइनरी खोज को छोड़कर, केवल SortedDictionary<T, U> का वर्णन करते हैं, जिसे आप बिना किसी कठिनाई के अपने आप लागू कर सकते हैं।

क्या विशिष्ट कारण हैं SortedDictionary आपके लिए अपर्याप्त है?

+0

* "जो आप बिना किसी कठिनाई के अपने आप को लागू कर सकते हैं।" * मुझे विश्वास नहीं है कि आप आसानी से SortedDictionary का विस्तार कर सकते हैं। मेटाडेटा को देखने से, और बस इसे विस्तारित करने का प्रयास करके, आवश्यक आंतरिक टुकड़े सुलभ प्रतीत नहीं होते हैं। क्या मै गलत हु? – Catskul

+0

क्या आपका मतलब है सॉर्टेड डिक्शनरी रेड-ब्लैक ट्री लागू करता है? यदि आप करते हैं, तो आपको यह कहां मिला? मुझे एमएसडीएन पृष्ठों पर इसका कोई उल्लेख नहीं दिख रहा है। – comecme

+0

हां; मैंने प्रतिबिंब में वर्ग को स्किम करके इसे सत्यापित किया है। आंतरिक रूप से, यह चाबियों को 'सॉर्टेडसेट ' में डालता है, जिसे लाल/काले पेड़ के रूप में लागू किया जाता है। मुझे यकीन नहीं है कि मैंने इसके बारे में सुना है - मुझे लगता है कि एमएसडीएन दस्तावेज का एक पुराना संस्करण 'सॉर्टेड लिस्ट' के विपरीत 'सॉर्टेड डिक्शनरी' के कार्यान्वयन के बारे में अधिक जानकारी देता है। इसके अलावा, उम, मुझे बिल्कुल यकीन नहीं है कि मैंने क्यों सोचा कि वह आसानी से इसे बढ़ा सकता है।यह स्पष्ट नहीं है कि वह कर सकता था। ओह अच्छा। – mquander

2

सी 5 संग्रह libs से ट्रीसेट सेट करें।

0

यह PowerCollections में ऑर्डरर्ड डिक्शनरी है। यह एक प्रारंभ कुंजी/अंत कुंजी सेट करने की क्षमता के अतिरिक्त सॉर्टेड डिक्शनरी (जेनेरिक के साथ लाल काला पेड़) के समान है और उस सीमा में सभी मान स्कैन करें।

सॉर्टेड डिकोनरी केवल संग्रह की शुरुआत में शुरू होने वाले GetEnumerator() फ़ंक्शन को उजागर करने की अनुमति देता है और केवल MoveNext() कॉल की अनुमति देता है, इसलिए यदि आप LINQ का उपयोग करते हैं तो भी जादू कुछ भी नहीं हो रहा है: यह शुरुआत से शुरू होता है और आपके चलाता है क्रमशः प्रत्येक एकल नोड पर अभिव्यक्ति, जब तक कि यह आपके LINQ अभिव्यक्ति से मेल खाने वाले लोगों को न पाएं।

OrderedDictionary में एक ऐसा फ़ंक्शन है जो किसी विशेष कुंजी पर या उससे पहले एक गणक प्राप्त करता है और यह ओ (लॉग एन) में लुकअप करता है।

चेतावनी का एक शब्द हालांकि: पावरकोलेक्शन ऑर्डर्ड डिक्शनरी में गणक "उपज" का उपयोग करके लागू किया गया है और स्मृति उपयोग और गणना प्रदर्शन कम से कम ओ (एन^2) है ... आप इसे बनाने के लिए स्वयं को कार्यान्वित कर सकते हैं एक पारंपरिक गणक को लागू करें और इन दोनों समस्याओं को दूर कर दें। यदि मैं कभी भी समय पा सकता हूं तो मैं कोडप्लेक्स को उस पैच को सबमिट करूंगा।

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