मुझे लगता है कि आपको एक आरेख द्वारा बेहतर सेवा दी जाएगी ... चलो एएससीआईआई कला के साथ खेलते हैं!
एक डेक आमतौर पर स्मृति भाग की एक सरणी होती है, लेकिन सामने और पीछे मेमोरी भाग के अलावा सभी अलग होते हैं।क्योंकि एक Deque एक RandomAccessContainer है, और हे (1) किसी भी कंटेनर तक पहुँच प्राप्त करने के लिए, आप जहाँ से आकार को पढ़ने के लिए कंटेनरों की एक असीम संख्या नहीं हो सकती यह आवश्यक है:
bool size() const { return first.size + (buckets.size()- 2) * SIZE + last.size; }
T& operator[](size_t i) {
if (i < first.size) { return first[SIZE - i]; }
size_t const correctedIndex = i - first.size;
return buckets[correctedIndex/SIZE][correctedIndex % SIZE];
}
उन संचालन हे हैं (1) गुणा/विभाजन की वजह से!
मेरे उदाहरण में, मुझे लगता है कि 8 तत्वों में एक मेमोरी खंड भरा हुआ है। अभ्यास में, किसी ने भी नहीं कहा कि आकार तय किया जाना चाहिए, बस सभी आंतरिक बाल्टी एक ही आकार के होंगे।
// Deque
0: ++
1: ++++++++
2: ++++++++
3: ++++++++
4: +++++
अब कहते हैं कि हमें सूचकांक 13 में सम्मिलित करना चाहते हैं यह बाल्टी लेबल 2 में कहीं गिर जाता है कई रणनीतियों के बारे में हम सोच सकते हैं कर रहे हैं:
- बाल्टी का विस्तार 2 (केवल)
- से पहले या 2 के बाद ही कुछ तत्वों
लेकिन उन दो रणनीतियों एक नया बाल्टी लागू करने और शफ़ल अपरिवर्तनीय है कि सभी "आंतरिक" बाल्टी में एक ही संख्या है का उल्लंघन होगा तत्वों का बियर
इसलिए हम,, चारों ओर तत्वों फेरबदल के साथ छोड़ दिया जाता है या तो शुरूआत या अंत (जो भी सस्ता है) की ओर हमारे मामले में:
// Deque
0: +++
1: ++++++++
2: +O++++++
3: ++++++++
4: +++++
नोट कैसे बाल्टी 0 की वृद्धि हुई।
यह शफल का अर्थ है कि, सबसे बुरे मामले में, आप आधे तत्वों को स्थानांतरित करेंगे: ओ (एन/2)।
deque
ओ (1) या तो शुरुआत या अंत में सम्मिलित है, क्योंकि वहां केवल सही जगह पर तत्व जोड़ने या यदि बाल्टी भर जाती है तो एक नई बाल्टी बना रही है।
ऐसे अन्य कंटेनर हैं जो B+ Trees के आधार पर यादृच्छिक सूचकांक पर बेहतर डालने/मिटाए गए व्यवहार हैं। एक अनुक्रमित बी + ट्री में आप "कुंजी" (या समानांतर में) की बजाय, किसी निश्चित स्थिति से पहले तत्वों की गिनती को बनाए रख सकते हैं। इसे कुशलतापूर्वक करने के लिए विभिन्न तकनीशियन हैं। अंत में आप के साथ एक कंटेनर मिलती है:
- हे (1): खाली, आकार
- हे (लॉग एन): डालने पर, मिटाएं
आप में blist
मॉड्यूल की जांच कर सकते हैं पायथन जो ऐसी संरचना द्वारा समर्थित पायथन सूची-जैसी तत्व लागू करता है।
सबसे खराब स्थिति यह ओ (एन/2) – Pubby