कुछ दिनों पहले this प्रश्न के परिणामस्वरूप कुछ ऐसी चीजें हैं जो std::deque::push_back/push_front
के लिए जटिलता आवश्यकताओं के बारे में मुझे परेशान कर रही हैं, वास्तविक std::deque
कार्यान्वयन में जंगली।std :: deque :: push_back/front
पिछले प्रश्न का उपरोक्त यह था कि इन परिचालनों में O(1)
सबसे खराब केस जटिलता होना आवश्यक है। मैं सत्यापित कि यह वास्तव में c++11
में मामला था:
23.3.3.4 Deque संशोधक से, सम्मिलित करने के लिए, धक्का/क़ायम करना सामने/वापस
जटिलता चर्चा करते हुए: जटिलता डाला तत्वों की संख्या में रेखीय है प्लस डेक की शुरुआत और अंत तक दूरी की कम दूरी। एक भी तत्व या तो शुरुआत है या एक Deque के अंत में सम्मिलित करना हमेशा स्थिर समय लगता है और , टी
यह अनुक्रमण के लिए O(1)
जटिलता आवश्यकता के साथ संयुक्त है की एक निर्माता के लिए एक कॉल का कारण बनता है operator[]
आदि के माध्यम से
मुद्दा यह है कि कार्यान्वयन इन आवश्यकताओं को सख्ती से पूरा नहीं करते हैं।
दोनों msvc
और gcc
std::deque
कार्यान्वयन के संदर्भ में एक अवरुद्ध डेटा संरचना, (फिक्स्ड आकार) ब्लॉक, की ओर इशारा का एक गतिशील सरणी से मिलकर वह जगह है जहाँ प्रत्येक ब्लॉक भंडार डेटा तत्वों की एक संख्या।
सबसे खराब स्थिति में, push_back/front etc
एक अतिरिक्त ब्लॉक आवंटित किया जाना आवश्यक बना सकते हैं (जो ठीक है - निर्धारित आकार आवंटन O(1)
है), लेकिन यह भी आवश्यकता हो सकती है कि ब्लॉक संकेत के गतिशील सरणी आकार दिया जा - इस ठीक नहीं है, चूंकि यह O(m)
है जहां m
ब्लॉक की संख्या है, जो दिन के अंत में O(n)
है।
स्पष्ट रूप से यह अभी भी O(1)
जटिलता को बढ़ाया गया है और आम तौर पर m << n
यह अभ्यास में बहुत तेज़ होने जा रहा है। लेकिन ऐसा लगता है कि अनुरूपता के साथ कोई मुद्दा है?
एक और बिंदु के रूप में, मुझे नहीं लगता कि आप एक डेटा संरचना कैसे डिजाइन कर सकते हैं जो और operator[]
दोनों के लिए O(1)
जटिलता दोनों को सख्ती से संतुष्ट करता है। आपके पास ब्लॉक पॉइंटर्स की एक लिंक-लिस्ट हो सकती है, लेकिन यह आपको वांछित operator[]
व्यवहार नहीं देती है। क्या यह वास्तव में किया जा सकता है?
संबंधित (लेकिन वास्तव में उत्तर दिया गया नहीं है): http://stackoverflow.com/questions/6292332/what-really-is-a-deque-in-stl –
@NateKohl: हाँ बिल्कुल - और उस प्रश्न के उत्तर यह पुष्टि करने के लिए प्रतीत होता है कि आप सभी जटिलता आवश्यकताओं को सख्ती से संतुष्ट नहीं कर सकते हैं ... –