सी # .NET में, मुझे लुकअप के लिए उनकी अनुमानित ओ (1) समय जटिलता के कारण हैशसेट्स का उपयोग करना पसंद है। अगर मेरे पास डेटा का एक बड़ा सेट है जो पूछताछ की जा रही है, तो मैं अक्सर सूची में हैशसेट का उपयोग करना पसंद करता हूं, क्योंकि इसमें इस समय जटिलता है।हैशसेट <T> (IEqualityComparer <T>) की लुकअप टाइम जटिलता क्या है?
क्या मुझे confuses HashSet, जो एक तर्क के रूप IEqualityComparer लेता है के लिए निर्माता है:
http://msdn.microsoft.com/en-us/library/bb359100.aspx
ऊपर के लिंक में, टिप्पणी, ध्यान दें कि "निर्माता एक हे (1) ऑपरेशन है "लेकिन अगर ऐसा है, तो मैं उत्सुक हूं यदि लुकअप अभी भी ओ (1) है।
विशेष रूप से, मुझे ऐसा लगता है कि, यदि मैं एक हैशसेट के निर्माता को पास करने के लिए एक तुलनाकर्ता लिखना चाहता था, जब भी मैं एक लुकअप करता हूं, तो तुलना करने के लिए प्रत्येक कुंजी पर तुलनाकर्ता कोड को निष्पादित करना होगा देखें कि कोई मैच था या नहीं। यह ओ (1) नहीं होगा, लेकिन ओ (एन)।
कार्यान्वयन आंतरिक रूप से एक लुकअप टेबल बनाते हैं क्योंकि तत्व संग्रह में जोड़े जाते हैं?
सामान्य रूप से, मैं .NET डेटा संरचनाओं की जटिलता के बारे में जानकारी कैसे प्राप्त कर सकता हूं?
बस इसे विभिन्न इनपुट आकारों के साथ जांचें और देखें कि लुकअप समय स्केल या स्थिर रहता है या नहीं। बहुत यकीन है कि दस्तावेज सही है हालांकि। –
कन्स्ट्रक्टर खत्म हो जाने पर यह * अभी भी * हैशसेट है। स्रोत डेटा-संरचना स्वयं नहीं रखी जाती है (उदाहरण के लिए इस मामले में कोई "प्रॉक्सी" नहीं है)। लुकअप ओ (1) है लेकिन डालें * amortized * ओ (1) है। –
@ किर्बी यह नहीं बदलता है। आप एक आईनेमरेबल से हैशसेट बना सकते हैं या बाद में तत्वों को जोड़ सकते हैं: केवल एक चीज जो * अलग हो सकती है, जो [लुकअप] समय जटिलता को प्रभावित नहीं करती है, क्षमता है। –