2010-05-03 18 views
6

मेरे कोड में, जावा TreeSet पुनरावृत्ति प्रभावशाली समय कारक है। सिस्टम को देखने में मुझे विश्वास है कि यह ओ (एन) जटिलता है। क्या कोई इसे सत्यापित कर सकता है?ट्रीसेट पुनरावृत्ति की समय जटिलता क्या है?

मुझे लगता है कि बाल नोड से पैरेंट नोड तक पिछड़े लिंक प्रदान करके मैं प्रदर्शन में सुधार कर सकता हूं।

+0

यह प्रश्न समझ में नहीं आता है। ऐसा लगता है जैसे आप अपने पेड़ पर फिर से चल रहे हैं ओ (एन) है। यह पुनरावृत्ति के लिए आप सबसे अच्छा कर सकते हैं - एन वस्तुओं को देखने के लिए ओ (एन) समय की आवश्यकता होती है। यदि आप कोड को तेज़ी से नियंत्रित करना चाहते हैं, तो आपको एल्गोरिदम को बदलना होगा, इसलिए यह पुनरावृत्ति नहीं करता है - उदाहरण के लिए, पेड़ में कुंजी द्वारा लुकअप करके (जो ओ (लॉग एन) होगा) बजाय। – babbageclunk

उत्तर

3

TreeSet पुनरावृत्ति निश्चित रूप से ओ (एन) है, जैसा किसी भी समझदार पेड़-चलने वाले एल्गोरिदम से अपेक्षा की जा सकती है।

मैं सोच रहा हूँ कि लिंक नोड माता-पिता के लिए बच्चे नोड से पिछड़े प्रदान करके मैं प्रदर्शन में सुधार कर सकते हैं।

TreeMap (जो TreeSet पर आधारित है) पहले से ही ऐसे मूल संदर्भ हैं।

private Entry<K,V> successor(Entry<K,V> t) { 
    if (t == null) 
     return null; 
    else if (t.right != null) { 
     Entry<K,V> p = t.right; 
     while (p.left != null) 
      p = p.left; 
     return p; 
    } else { 
     Entry<K,V> p = t.parent; 
     Entry<K,V> ch = t; 
     while (p != null && ch == p.right) { 
      ch = p; 
      p = p.parent; 
     } 
     return p; 
    } 
} 
+0

मुझे लगता है कि मुख्य बिंदु यह है कि यह केवल पत्ती नोड्स नहीं है जिनके मूल्य संलग्न हैं। 'N' पत्तियों के लिए आपके पास 'ओ (एन लॉग एन)' नोड्स हैं लेकिन 'ओ (एन लॉग एन)' मान भी हैं। वास्तविक मामलों में, मैं उम्मीद करता हूं कि 'ओ (एन)' संचालन 'ओ (एन लॉग एन)' ऑपरेशंस पर हावी होने के लिए। –

+0

मैंने सोचा कि यह ओ (एन) + ओ (लॉगन) होगा क्योंकि यदि आप पुनरावृत्त कर रहे हैं तो आपको पहले बाएं या दाएं पत्ते को खोजने के लिए लॉग (एन) ट्रैवर्सल का उपयोग करना होगा, और फिर आपके पास पेड़ चलने के लिए एन ट्रैवर्सल होंगे पीछे की ओर। इस प्रकार आपके पास ओ (एन) है? क्या मेरा गणित समझ में आता है? –

+1

@john: ओ (एन) + ओ (लॉग एन) एक ही चीज है जो ओ (एन) प्रति परिभाषा है। –

1

आप TreeSet की एक प्रति लेने जब आप इसे बदल माना जाता है: यह विधि यह सब करने पर निर्भर करता है? यदि हावी समय ट्रीसेट पुनरावृत्ति (इसे संशोधित करने के बजाय) में बिताया जाता है तो ट्रीसेट को एक सरणी या ऐरेलिस्ट (केवल तभी बदला जाता है) में कॉपी करना और केवल इस सरणी/एरेलेस्टिस्ट पर पुनरावृत्ति करना ट्रीसेट पुनरावृत्ति की लागत को लगभग समाप्त कर सकता है।

+0

या अमरूद की 'इमटेबल सॉर्टेडसेट', जो सरणी समर्थित है। –

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