2012-10-08 33 views
7

मैंने पढ़ा है कि एक सेट में सम्मिलित ऑपरेशन केवल लॉग (एन) समय लेता है। वो कैसे संभव है?सेट की जटिलता :: डालने

डालने के लिए, पहले हमें क्रमबद्ध सरणी में स्थान मिल गया है जहां नया तत्व बैठना चाहिए। बाइनरी खोज का उपयोग करके यह लॉग (एन) लेता है। फिर उस स्थान को सम्मिलित करने के लिए, इसे प्राप्त करने वाले सभी तत्वों को एक स्थान को दाईं ओर स्थानांतरित किया जाना चाहिए। यह एक और एन समय लेता है।

मेरा संदेह मेरी समझ पर आधारित है कि सेट को सरणी के रूप में कार्यान्वित किया गया है और तत्व क्रमबद्ध क्रम में संग्रहीत हैं। अगर मेरी समझ गलत है तो कृपया मुझे सही करें।

+9

आप मानते हैं कि 'std :: set' को सॉर्ट किए गए सरणी के रूप में कार्यान्वित किया गया है। क्यूं कर? –

+5

cppreference से लिया गया: * सेट आमतौर पर लाल-काले पेड़ों के रूप में लागू होते हैं। * – chris

+1

@ कोनराड रुडॉल्फ: अब केवल मुझे पता चला है कि सेट लाल-काले पेड़ का उपयोग करके लागू किए गए हैं। धन्यवाद क्रिस – bibbsey

उत्तर

15

std::set आमतौर पर एक लाल-काले बाइनरी खोज पेड़ के रूप में लागू किया जाता है। इस डेटा संरचना पर सम्मिलन में ओ (लॉग (एन)) जटिलता का सबसे खराब मामला है, क्योंकि वृक्ष संतुलित रखा जाता है।

+0

काफी नहीं: संशोधित पुनर्विक्रय को लागू कर सकता है जो एक बार फिर एक ओ (लॉग एन) ऑपरेशन है। –

+0

लाल-काले पेड़ के साथ, सम्मिलन में ओ (लॉग (एन)) का सबसे खराब मामला होना चाहिए, यहां तक ​​कि पुनर्विक्रय पर विचार करना भी। – cdhowie

+4

हां, ज़ाहिर है, मैंने इसे प्रतियोगिता नहीं दी। लेकिन आपने कहा कि पेड़ को संशोधित करना ओ (1) है। *यह गलत है। –