सकारात्मक परिणाम: दृढ़ता बहुत अधिक खर्च नहीं करती है। एक दिखा सकता है कि प्रत्येक डेटा संरचना को पूरी तरह से एक मंदी के साथ पूरी तरह से स्थिर बनाया जा सकता है ।O(lgn)
प्रमाण: आप एक सरणी ले सकते हैं और इसे मानक डेटा संरचनाओं (उदाहरण के लिए, एक संतुलित बाइनरी ट्री) का उपयोग करके लगातार बना सकते हैं; इस उत्तर के अंत को थोड़ा और विस्तार से देखें)। यह स्लोडाउन को बढ़ाता है: प्रत्येक एरे एक्सेस का उपयोग लगातार डेटा संरचना के साथ O ( lg n ) समय लेता है , इसके बजाय O ( 1 ) टाइम नॉन-परसेंटेज एरे के लिए। अब किसी भी अनिवार्य एल्गोरिथ्म को लें जिसका रैम मॉडल में चलने का समय हे ( f ( n ) ) है , जहां n उपयोग की गई मेमोरी की मात्रा को दर्शाता है। स्मृति के सभी एक बड़े सरणी (के साथ) के रूप में प्रतिनिधित्व करते हैंO(lgn)O(lgn)O(1)O(f(n))n तत्व), और इसे लगातार मानचित्र का उपयोग करके लगातार बनायें। अत्यावश्यक एल्गोरिथ्म का प्रत्येक चरण सबसे अधिक O ( lg n ) मंदी पर चलता है, इसलिए कुल चलने का समय O ( f ( n ) lg n ) है ।nO(lgn)ओ ( एफ)( n ) lgn )
जाहिरा तौर पर यह थोड़ा बेहतर करना संभव है: जाहिर है कि (अपेक्षित समय, परिशोधन समय) में मंदी के कारक को कम किया जा सकता है, नीचे दिए गए डेइन पेपर में तकनीकों का उपयोग करते हुए - लेकिन मैं विवरण से परिचित नहीं हूं उस काम के लिए, इसलिए मैं खुद इसके लिए प्रतिज्ञा नहीं कर सकता। इस अवलोकन के लिए jbapple का धन्यवाद।ओ ( lg)एलजीn )
नकारात्मक परिणाम: आप कुछ डेटा संरचनाओं के लिए, कुछ मंदी से बच नहीं सकते। आपके तीसरे प्रश्न का उत्तर देने के लिए, वहाँ डेटा संरचनाएँ मौजूद हैं जहाँ यह ज्ञात है कि उन्हें लगातार बनाए रखना कुछ मंदी का परिचय देता है।
विशेष रूप से, तत्वों की एक सरणी पर विचार करें । दृढ़ता के बिना, प्रत्येक ऐरे एक्सेस ओ ( 1 ) समय (रैम मॉडल में) लेता है । दृढ़ता के साथ, यह स्पष्ट रूप से दिखाया गया है कि यादृच्छिक तत्व तक पहुंचने के लिए ओ ( 1 ) सबसे खराब स्थिति के साथ एक लगातार सरणी बनाने का कोई तरीका नहीं है । विशेष रूप से, जाहिरा तौर पर एक कम बाउंड दिखा रहा है कि पूरी तरह से लगातार सरणियों में l ( lg lg n ) एक्सेस समय होना चाहिए । यह निम्न सीमा निम्नलिखित कागज के p.3 पर मुखर है:nओ ( 1 )ओ ( 1 )G ( lg)एलजीn )
निचली बाउंड का श्रेय मिहाई पतरास्कु को दिया जाता है, लेकिन ऐसे स्रोत का कोई उद्धरण नहीं है जो इस दावे के प्रमाण का विवरण देता है।
अनुसंधान का एक समृद्ध क्षेत्र। यदि हम एक मनमाना डेटा संरचना या एल्गोरिथ्म लेते हैं, तो यह एक नाजुक सवाल है कि क्या आप इसे सबसे अधिक मंदी के साथ लगातार बना सकते हैं या नहीं। मैं किसी भी सामान्य वर्गीकरण प्रमेय के बारे में नहीं जानता। हालांकि, विशिष्ट डेटा संरचनाओं को लगातार बनाने के तरीकों में एक कुशल तरीके से बहुत सारे शोध हैं।ओ ( 1 )
कार्यात्मक प्रोग्रामिंग भाषाओं के साथ एक मजबूत संबंध भी है। विशेष रूप से, प्रत्येक डेटा संरचना जिसे विशुद्ध रूप से कार्यात्मक तरीके से लागू किया जा सकता है (कोई म्यूटेशन के साथ) पहले से ही एक स्थायी डेटा संरचना है। (आक्षेप आवश्यक रूप से मामला नहीं है, अफसोस।) यदि आप अपनी आँखों को निचोड़ना चाहते हैं, तो आप इसे आंशिक वर्गीकरण प्रमेय के कुछ कमजोर प्रकारों के रूप में ले सकते हैं: यदि यह एक विशुद्ध रूप से कार्यात्मक प्रोग्रामिंग भाषा में लागू होता है जिसमें एक ही समय सीमा होती है। एक अनिवार्य भाषा है, तो एक ही समय के साथ एक निरंतर डेटा संरचना होती है जो गैर-लगातार एक के रूप में होती है। मुझे पता है कि यह वह नहीं है जो आप ढूंढ रहे थे - यह ज्यादातर स्थिति का केवल एक तुच्छ पुन: अध्ययन है।
कैसे एक निरंतर सरणी बनाने के लिए। मैं सबसे खराब स्थिति वाले समय के साथ एक पूरी तरह से लगातार सरणी बनाने के लिए निर्माण का वर्णन करने की कोशिश नहीं करूंगा । हालांकि, मूल विचार बहुत जटिल नहीं हैं, इसलिए मैं विचारों के सार को संक्षेप में बताऊंगा।O(lgn)
मूल विचार यह है कि हम किसी भी बाइनरी ट्री डेटा संरचना को ले सकते हैं, और पथ प्रतिलिपि बनाने वाली तकनीक का उपयोग करके इसे लगातार बना सकते हैं । चलो कहते हैं कि हम एक द्विआधारी पेड़ है, और हम कुछ पत्ती में मूल्य को संशोधित करना चाहते । हालांकि, दृढ़ता के लिए, हम उस पत्ती के स्थान पर मूल्य को संशोधित करने का साहस नहीं करते हैं। इसके बजाय, हम उस पत्ते की एक प्रति बनाते हैं, और कॉपी में मूल्य को संशोधित करते हैं। फिर, हम इसके अभिभावक की एक प्रति बनाते हैं, और नए पत्ते को इंगित करने के लिए उपयुक्त चाइल्ड पॉइंटर को कॉपी में बदलते हैं। इस तरह से आगे बढ़ें, प्रत्येक नोड को रूट से लीफ तक के पथ पर क्लोनिंग करें। यदि हम गहराई d पर एक पत्ती को संशोधित करना चाहते हैं , तो इसके लिए d नोड्स की प्रतिलिपि बनाने की आवश्यकता होती है ।ℓdd
यदि हमारे पास एक संतुलित बाइनरी ट्री में नोड्स हैं, तो सभी पत्तियों में गहराई O ( lg n ) है , इसलिए बाइनरी ट्री पर इस ऑपरेशन में O ( lg n ) समय लगता है। कुछ विवरण हैं जो मैं स्किप कर रहा हूं - O ( lg n ) सबसे खराब स्थिति के समय को प्राप्त करने के लिए , हमें पेड़ को संतुलित करने के लिए इसे संतुलित बनाए रखने की आवश्यकता हो सकती है - लेकिन इससे इसका पता चलता है।nO(lgn)O(lgn)O(lgn)
आप निम्न संसाधनों पर सुंदर चित्रों के साथ अधिक स्पष्टीकरण पा सकते हैं:
जो आपको मुख्य विचार देगा। देखभाल करने के लिए अतिरिक्त विवरण हैं, लेकिन विवरण इस प्रश्न के दायरे से बाहर हैं। सौभाग्य से, यह सभी मानक सामान है, और इस तरह के डेटा संरचनाओं का निर्माण करने के बारे में साहित्य में बहुत सारी जानकारी उपलब्ध है। एक अलग प्रश्न पूछने के लिए स्वतंत्र महसूस करें यदि उपरोक्त संसाधन पर्याप्त नहीं हैं और आप लगातार सरणी डेटा संरचना के निर्माण के बारे में अधिक जानकारी चाहते हैं।