मैंने हाल ही में पढ़ा है कि ऐसे सरणियों के लिए संभव है, जिन्हें आरंभीकृत करने की आवश्यकता नहीं है, अर्थात बिना किसी समय के प्रत्येक सदस्य को डिफ़ॉल्ट मान पर सेट करने का प्रयास किए बिना उनका उपयोग करना संभव है। यानी आप सरणी का उपयोग करना शुरू कर सकते हैं जैसे कि इसे शुरू करने के लिए बिना डिफ़ॉल्ट मान द्वारा प्रारंभ किया गया है। (क्षमा करें, मुझे याद नहीं है कि मैंने यह कहां पढ़ा है)।
उदाहरण के लिए क्यों आश्चर्य की बात हो सकती है:
मान लें कि आप पूर्णांक में में पूर्णांक के सबसे खराब केस हैशटेबल (सम्मिलित / डिलीट / सर्च में से प्रत्येक लिए प्रयास कर रहे हैं ।[ 1 , n 2 ]
आप आकार की एक सरणी बिट्स आवंटित कर सकते हैं और हैशटेबल में पूर्णांक के अस्तित्व का प्रतिनिधित्व करने के लिए व्यक्तिगत बिट्स का उपयोग कर सकते हैं । नोट: मेमोरी आवंटित करना समय माना जाता है ।
अब, अगर आप सब पर इस सरणी प्रारंभ करने में नहीं था, कहते हैं की किसी भी क्रम इस hashtable पर कार्रवाई अब सबसे खराब स्थिति है ।ओ ( एन )
तो वास्तव में, आपके पास "पूर्ण" हैश कार्यान्वयन है, जो संचालन के अनुक्रम के लिए स्थान का उपयोग करता है, लेकिन समय में चलता है !Θ ( n 2 ) हे ( एन )
आम तौर पर किसी से अपेक्षा की जाती है कि आपका रनटाइम कम से कम आपके अंतरिक्ष उपयोग के रूप में खराब हो!
नोट: ऊपर दिए गए उदाहरण का उपयोग विरल सेट या विरल मैट्रिक्स के कार्यान्वयन के लिए किया जा सकता है, इसलिए यह केवल सैद्धांतिक हित नहीं है, मुझे लगता है।
तो सवाल यह है:
डेटा-संरचना की तरह एक सरणी होना कैसे संभव है जो हमें आरंभीकरण कदम को छोड़ने की अनुमति देता है?