2009-08-19 9 views
19

के पेशेवरों और विपक्ष क्या हैं बस यह सोचकर कि ट्रीसेट का पेशेवर और विपक्ष क्या है, अगर कोई मुझे बता सकता है? धन्यवाद!ट्रीसेट

+0

इन प्रश्नों और संबंधित उत्तरों के बाहर होने के लायक हैं। बहुत उपयोगी! धन्यवाद! – mtical

उत्तर

23

संग्रह कक्षाओं में से एक। यह आपको कुंजी द्वारा अपने संग्रह में तत्वों तक पहुंचने देता है, या अनुक्रमिक रूप से कुंजी द्वारा। यह ArrayList या हैश मैप से काफी अधिक ओवरहेड है। जब आपको अनुक्रमिक पहुंच की आवश्यकता नहीं है, तो हैशसेट का उपयोग करें, केवल कुंजी द्वारा लुकअप करें। एक ArrayList का उपयोग करें और Arrays का उपयोग करें। अगर आप सिर्फ तत्वों को क्रम में चाहते हैं तो सॉर्ट करें। TreeSet तत्वों को हर समय क्रम में रखता है। ArrayList के साथ जब आपको आवश्यकता हो तो बस सॉर्ट करें। ट्रीसेट्स के साथ कुंजी को संग्रह में संग्रहीत ऑब्जेक्ट में एम्बेड किया जाना चाहिए। अक्सर आप स्ट्रिंग्स के ट्रीसेट हो सकते हैं। तब आप यह बता सकते हैं कि दिया गया स्ट्रिंग सेट में है या नहीं। यह आपको ट्रेमैप की तरह एक संबद्ध वस्तु नहीं मिलेगा। वृक्षारोपण के साथ वे जिन कुंजी और वस्तुओं से जुड़े होते हैं वे अलग होते हैं।

ट्रीसेट और उसके भाई ट्रीएप के पास पेड़ का प्रतिनिधित्व करने के साथ कुछ भी नहीं है। आंतरिक रूप से वे आपको एक वर्णमाला क्रमबद्ध सेट/मानचित्र देने के लिए एक वृक्ष संगठन का उपयोग करते हैं, लेकिन माता-पिता और बच्चों के बीच संबंधों पर आपका कोई नियंत्रण नहीं है।

आंतरिक रूप से ट्रीसेट लाल-काले पेड़ों का उपयोग करता है। एक संतुलित संतुलित पेड़ पाने के लिए डेटा को प्रस्तुत करने की कोई आवश्यकता नहीं है। दूसरी तरफ, यदि डेटा क्रमबद्ध (आरोही या अवरोही) क्रमबद्ध किया जाता है, तो यह किसी अन्य प्रकार के पेड़ के साथ चोट नहीं पहुंचाएगा।

यदि आप इच्छित ऑर्डर को परिभाषित करने के लिए एक तुलनाकर्ता की आपूर्ति नहीं करते हैं, तो ट्रीसेट को प्राकृतिक क्रम को परिभाषित करने के लिए आइटम क्लास पर एक तुलनात्मक कार्यान्वयन की आवश्यकता होती है।

+4

विशिष्ट उपयोग केस: एक टेक्स्ट लें, इस टेक्स्ट से सभी शब्दों को ट्रीसेट में छोड़ दें और इटेटरेटर वर्णमाला क्रमबद्ध शब्द इंडेक्स प्रदान करता है (बिना डुप्लिकेट के)। –

+0

"जब आपको अनुक्रमिक पहुंच की आवश्यकता नहीं है, तो केवल हैशसेट का उपयोग करें, केवल कुंजी द्वारा लुकअप करें।" - आपका मतलब है कि जब आपको कुंजी द्वारा लुकअप की आवश्यकता नहीं होती है (जो नक्शा प्रदान करता है)? –

+0

यदि आपको किसी विशिष्ट अनुक्रमिक पहुंच की आवश्यकता है लेकिन कोई सॉर्टिंग नहीं है तो आप LinkedHashSet का उपयोग कर सकते हैं जो इनपुट डेटा के क्रम को सुरक्षित रखता है। इसके अलावा ट्रीसेट ने लॉगऑन के ऑर्डर को हटा दिया है जबकि प्राथमिकता क्यूई ऑर्डर ऑर्डर ओ (एन) –

3

ट्रीसेट:
पेशेवर: लाल/काले पेड़ एल्गोरिदम के आधार पर क्रमबद्ध, संचालन के लिए ओ (लॉग (एन)) जटिलता प्रदान करता है।
विपक्ष: मान या तो होना चाहिए तुलनात्मक या आपको कन्स्ट्रक्टर प्रदान करने की आवश्यकता है। इसके अलावा, हैशसेट कार्यान्वयन बेहतर प्रदर्शन प्रदान करता है क्योंकि यह ~ ओ (1) जटिलता प्रदान करता है।

+0

बहुत बहुत धन्यवाद! – Rifk

+0

एक "समर्थक" के रूप में "लाल/काले पेड़ एल्गोरिदम पर आधारित" मीट्रिक के लिए विषम लगता है। ओ (लॉग (एन)) जटिलता को प्रो के रूप में उल्लेख करने के लिए थोड़ा अजीब लगता है जब ट्रीसेट की तुलना करने की स्पष्ट चीज़ हैशसेट है (जैसा आपने कहा) बेहतर समय जटिलता है। –

+1

@Laurence: 1) एक सूची में सम्मिलन ओ (एन) है यदि आप विशिष्टता की जांच करना शामिल करते हैं, तो ओ (लॉग (एन)) इसके सापेक्ष एक "समर्थक" है। 2) एक हैशसेट केवल ओ (1) है यदि आप एक सभ्य हैश फ़ंक्शन का उपयोग करते हैं और आप हैश तालिका को बढ़ने की अनुमति देते हैं। –

0

मुझे लगता है कि यह डेटास्ट्रक्चर डेटा को बनाए रखने के लिए बाइनरी पेड़ का उपयोग करेगा ताकि आरोही क्रम पुनर्प्राप्ति संभव हो। उस स्थिति में, यदि यह पेड़ को संतुलन में रखने की कोशिश करता है तो निकालना ऑपरेशन थोड़ा महंगा होगा।

+1

-1: हैशसेट लाल-काले पेड़ का उपयोग करता है। [इस पृष्ठ] के अनुसार [http://www.eli.sdsu.edu/courses/fall95/cs660/notes/RedBlackTree/RedBlack.html) हटाने की जटिलता ओ है (लॉग (एन)) –

9

विपक्ष: ट्रीसेट के साथ एक गड़बड़ यह है कि यह एक अप्रत्याशित तरीके से सेट इंटरफ़ेस लागू करता है। यदि किसी ट्रीसेट में ऑब्जेक्ट होता है, तो ऑब्जेक्ट बी को सेट का हिस्सा माना जाता है यदि a.compareTo (b) 0 देता है, भले ही a.equals (b) गलत है, तो यदि तुलना करें और बराबर बराबर में लागू नहीं किया गया है रास्ता, आप एक बुरी सवारी के लिए हैं।

यह एक समस्या है जब एक विधि एक सेट देता है, और आप नहीं जानते कि कार्यान्वयन एक ट्रीसेट है या, उदाहरण के लिए, हैशसेट।

यहां सीखने का सबक है, तुलनात्मक रूप से तुलना करने से बचने के लिए हमेशा असंगत रूप से बराबर होता है। यदि आपको वस्तुओं को ऑर्डर करने की आवश्यकता है जो बराबर के साथ असंगत है, तो तुलनात्मक का उपयोग करें।

+1

का उपयोग करने का कोई दायित्व शायद आप कहना चाहते हैं "अगर a.compareTo (बी) शून्य लौटाता है"? –

+1

वाह। 4 साल पुरानी पोस्ट पर रचनात्मक प्रतिक्रिया। धन्यवाद, मैंने इसे ठीक कर दिया है। – Buhb

2

ट्रीसेट टुकड़े स्मृति और अतिरिक्त मेमोरी ओवरहेड है। आप स्रोतों को देख सकते हैं और अतिरिक्त मेमोरी की मात्रा और उसके द्वारा बनाई गई अतिरिक्त वस्तुओं की मात्रा की गणना कर सकते हैं। बेशक यह संग्रहीत वस्तुओं की प्रकृति पर निर्भर करता है और आप मुझे स्मृति के बारे में पागल होने का संदेह भी कर सकते हैं :) लेकिन यह बेहतर है कि इसे यहां और वहां खर्च न करें - आपके पास जीसी है, आपके पास कैश मिस है और ये सभी चीजें धीमी हैं।

अक्सर आप TreeSet के बजाय PriorityQueue का उपयोग कर सकते हैं। और आपके सामान्य उपयोग मामले में तारों की सरणी को सॉर्ट करना बेहतर होता है।

संबंधित मुद्दे