HashSet.ElementAt
ओ (1) में कार्यान्वयन है और यदि नहीं, तो यह क्या है?हैशसेट के लिए Enumerable.ElementAt <TSource> ओ (1) है?
उत्तर
नहीं, यह ओ (एन) है। IEnumerable<T>
पर सभी एक्सटेंशन विधियां आवश्यक हैं, ओ (एन) (क्योंकि केवल एक चीज जो IEnumerable<T>
कर सकती है ... गणना करें)। हालांकि, टिप्पणियों में बताया गया है कि, वे एक इंटरफ़ेस को डालने का प्रयास करते हैं जो ऑपरेशन को तेज़ी से कार्यान्वित कर सकता है (उदाहरण के लिए, ElementAt
ओ (1) ऑपरेशन को लागू करने के लिए IList<T>
पर डालने का प्रयास करेगा)। ऐसा नहीं है कि HashSet<T>
के मामले में मदद करता है जो IList<T>
को लागू नहीं करता है।
HashSet<T>
के लिए "एलिमेंटएट" की अवधारणा वास्तव में समझ में नहीं आती है, क्योंकि इस तरह कोई "ऑर्डरिंग" नहीं है। आप मूल रूप से सिर्फ यादृच्छिक तत्व प्राप्त कर रहे हैं।
कोई ElementAt
विधि में HashSet
तो आप शायद Enumerable.ElementAt
विधि के प्रदर्शन को पता है जब HashSet<T>
का एक उदाहरण पर इस्तेमाल करना चाहते हैं।
Enumerable.ElementAt
विधि IList<T>
लागू करने वाले प्रकारों के लिए एक अनुकूलन है। उस मामले में प्रदर्शन ओ (1) है। हालांकि, हैशसेट इस इंटरफेस को लागू नहीं करता है, इसलिए प्रदर्शन ओ (एन) है।
@ स्टेवेन, एक एलिमेंट एक्ट becuase हैशसेट आईसीलेक्शन से निकला है। –
@ फिलिप: 'हैशसेट
@ स्टीवन, मैं .NET 4.0 का उपयोग कर रहा हूं और रीशेपर मुझे 'आईसीओलेक्शन
यह अंडरलिंग सूची प्रकार पर निर्भर करता है। परावर्तक दिखाता है कि Enumerable<T>.ElementAt(...)
पहले IList<T>
पर डालने का प्रयास करता है। उस मामले में यह ओ (1) होगा।
उदाहरण के लिए एक क्वेरी प्रदाता कुछ ऐसा कर सकता है जो IList<T>
है। लेकिन संभावना है कि यदि आप किसी भी लिंक ऑपरेटर को लागू करते हैं, तो यह IEnumerable<T>
में बदल जाएगा, क्योंकि वे केवल विभिन्न गणक का उपयोग करके बनाए जाते हैं, और यह ओ (एन) बन जाएगा।
संपादित करें: मैंने HashSet
को ओवरड्रेड किया। HashSet<T>
IList<T>
लागू नहीं करता है, इस प्रकार यह ओ (एन) है।
- 1. ओ (1) हैश लुक अप?
- 2. ओ (1)
- 3. ओ (1)
- 4. हास्केल: ओ (1) के साथ डेटास्ट्रक्शन और ओ (1) अनुक्रमण?
- 5. स्ट्रिंग है। एलिमेंटएट() ओ (1)?
- 6. ओ (1) जटिलता
- 7. ओ (1) पायथन
- 8. ओ (1) सहायक अंतरिक्ष
- 9. LinkedList.Clear() ओ (1)
- 10. थोड़ा स्थानांतरण ओ (1) या ओ (एन) है?
- 11. हैशसेट <T> (IEqualityComparer <T>) की लुकअप टाइम जटिलता क्या है?
- 12. सी # हैशसेट <string>
- 13. इंडेक्सऑटऑफेंजेंज अपवाद जब हैशसेट <T>
- 14. हैशिंग के पास ओ (1) खोज समय कैसा है?
- 15. शब्दकोश लुकअप (ओ (1)) बनाम लिंक जहां
- 16. ओ (1) हैकसेल में परिपत्र बफर?
- 17. इस एल्गोरिदम की अंतरिक्ष जटिलता ओ (1)
- 18. बिग ओ के लिए loops
- 19. सॉर्टेडसेट <T> बनाम हैशसेट <T>
- 20. हैशसेट
- 21. साबित करें = बिग-ओ (1) प्रेरण
- 22. .NET 4 ISet <> हैशसेट <> NHHernate Iesi को बदल सकता है। चयन आईसेट, हैशसेट?
- 23. सी # हैशसेट <T> खोज प्रदर्शन (एक पर्यवेक्षण चयन <T> की तुलना में)?
- 24. -ओ-विकल्प क्या है wget के लिए?
- 25. एसक्यूएल के लिए बिग-ओ क्या है?
- 26. क्या हैश टेबल वास्तव में ओ (1) हो सकता है?
- 27. इसका क्या अर्थ है: ओ (एन) चरण और ओ (1) अंतरिक्ष?
- 28. सी ++ में, जो तेज़ है? (2 * i + 1) या (i << 1 | 1)?
- 29. "ओ (1) एक्सेस टाइम" का क्या अर्थ है?
- 30. क्या जावा हैशप वास्तव में ओ (1) है?
फिर यदि आपको कई पंक्तियों पर ElementAt का उपयोग करने की आवश्यकता है तो 'ToArray' को एक बेहतर चीज़ करना होगा? क्या हैससेट के साथ "सही" ऑर्डर प्राप्त करना कभी संभव नहीं है? –
हां, एक 'ToArray' और फिर एकाधिक "तत्व" ('[]' ऑपरेटर के माध्यम से) बहुत तेज होगा। हैशसेट के साथ "सही" ऑर्डर जैसी कोई चीज़ नहीं है, क्योंकि किसी भी सार्थक तरीके से तत्वों का आदेश नहीं दिया जाता है। –
ठीक है, हालांकि जब मैं ऐसा करता हूं: {2, 3, 4} और उन लोगों के साथ दो हैशसेट शुरू करें, मुझे प्रत्येक तत्व के माध्यम से कदम उठाने पर सही क्रम मिलती है। –