एक द्विआधारी पेड़ में सबसे छोटा शाखा?

वोट
1

एक द्विआधारी पेड़ दो कार्यों का उपयोग कर एन्कोड किया जा सकता lऔर r ऐसा है कि एक के लिए node n, l(n)के बाईं बच्चे दे n, r(n) के अधिकार के बच्चे दे n

एक पेड़ की एक शाखा एक पत्ता को जड़ से एक रास्ता है, एक विशेष पत्ती को एक शाखा की लंबाई है कि पत्ती को जड़ से पथ पर आर्क्स की संख्या है।

चलो MinBranch(l,r,x)एक द्विआधारी पेड़ के साथ द्विआधारी पेड़ के लिए रूट नोड एक्स एक साथ एल और आर कार्यों द्वारा इनकोडिंग लेने के लिए एक सरल पुनरावर्ती एल्गोरिदम हो सकता है और द्विआधारी पेड़ की कम से कम शाखा की लंबाई देता है।

इस एल्गोरिथ्म के लिए स्यूडोकोड दे।

ठीक है, तो मूल रूप से यह है कि क्या मैं अब तक के साथ आ गया है:

MinBranch(l, r, x)
{
    if x is None return 0

    left_one = MinBranch(l, r, l(x))

    right_one = MinBranch(l, r, r(x))

    return {min (left_one),(right_one)}
}

जाहिर है इस महान या सही नहीं है। किसी भी मदद की सराहना की जाएगी - मैं आभारी अगर लोगों को मदद कर सकते हैं मुझे इस सही और काम पाने होगी।

28/08/2009 को 05:07
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


5 जवाब

वोट
3

मुझे शक है किसी को भी आप सीधे-अप के लिए होमवर्क का समाधान होगा। एक सुराग: वापसी मान निश्चित रूप से, सही उच्च हो जाना चाहिए के रूप में पेड़ बड़ा हो जाता है? हालांकि मुझे पता नहीं इसके अलावा ऑपरेटरों या तो 0 को छोड़कर अपने कार्य में किसी भी सांख्यिक शाब्दिक नहीं देखते हैं, और। कैसे आप कभी भी बड़ी संख्या में वापस आ जाएगी?

एक ही मुद्दे पर एक और कोण: किसी भी समय आप एक पुनरावर्ती समारोह लिखते हैं, यह गणना करने में मदद करता है "? सभी शर्तों जहाँ मैं खुद को बुला क्या मैं हर परिस्थिति में लौट बंद कर देना चाहिए क्या हैं?"

28/08/2009 को 05:15
का स्रोत उपयोगकर्ता

वोट
2

आप सही दृष्टिकोण पर हैं, लेकिन आप काफी वहाँ नहीं कर रहे हैं; अपने पुनरावर्ती एल्गोरिदम हमेशा 0. वापस आ जाएगी (तर्क हालांकि लगभग सही है, ...)

ध्यान दें कि उप शाखाओं की लंबाई शाखा की लंबाई से एक कम है; इसलिए left_oneऔर right_oneहोना चाहिए 1 + MinBranch...

कुछ नमूने के पेड़ के साथ एल्गोरिथ्म के माध्यम से steping में मदद मिलेगी इस तरह उजागर बंद-एक करके त्रुटियों ...

28/08/2009 को 05:16
का स्रोत उपयोगकर्ता

वोट
0

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

सुझाव: एक चौड़ाई-पहले खोज दृष्टिकोण पर विचार करें।

28/08/2009 को 05:19
का स्रोत उपयोगकर्ता

वोट
0

क्या तुम वहाँ एक गहराई पहले खोज एल्गोरिथ्म जो पूरे पेड़ खोज करने के लिए इससे पहले कि आप एक समाधान के साथ आने होगा की तरह दिखता है। क्या आप की जरूरत है चौड़ाई पहले खोज एल्गोरिथ्म जो जैसे ही यह समाधान पाता है एक पूर्ण खोज कर के बिना लौट सकते हैं

28/08/2009 को 05:19
का स्रोत उपयोगकर्ता

वोट
1

ऐसा लगता है कि आप लगभग यह है, लेकिन इस उदाहरण पर विचार करें:

      4

   3     5

जब आप के माध्यम से पता लगाने MinBranch, आप देखेंगे कि आपके में देखेंगे MinBranch(l,r,4)कॉल:

left_one = MinBranch(l, r, l(x))
         = MinBranch(l, r, l(4))
         = MinBranch(l, r, 3)
         = 0

यही कारण है कि समझ में आता है, सब के बाद, 3, एक पत्ता नोड है, तो निश्चित रूप से सबसे करीब पत्ती नोड के लिए दूरी 0. ही right_one के लिए होता है।

लेकिन तुम तो यहाँ हवा:

return {min (left_one),(right_one)}
     = {min (0), (0) }
     = 0

लेकिन यह है कि, स्पष्ट रूप से गलत है क्योंकि इस नोड (4) एक पत्ता नोड नहीं है। आपका कोड वर्तमान नोड (उफ़!) गिनती करने के लिए भूल गया था। मैं आपको लगता है कि ठीक करने के लिए प्रबंधन कर सकते हैं यकीन है।


अब, वास्तव में, वे जिस तरह से आप कर रहे हैं इस सबसे तेजी से नहीं है, लेकिन मुझे यकीन है कि अगर इस अभ्यास के लिए प्रासंगिक है नहीं कर रहा हूँ। इस पेड़ पर विचार करें:

         4
       3   5
     2
   1

आपका एल्गोरिथ्म रिकर्सिवली बाईं शाखा की गणना होती है, भले ही यह, परिकल्पित, जमानत सकता है अगर आप पहली बार सही शाखा गिना जाता है और कहा गया है कि 3 एक छोड़ दिया है, तो इसकी स्पष्ट रूप से लंबे समय तक की तुलना में 5 (जो एक पत्ता है)। लेकिन, बेशक, सही शाखा की गिनती पहले हमेशा काम नहीं करता!

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

28/08/2009 को 05:20
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more