ठीक है, तो चलिए इस एल्गोरिदम के लिए सबसे खराब स्थिति की पहचान करके शुरू करते हैं। covers
खोजें पेड़ बाएं से दाएं, तो आप बुरी से बुरी हालत व्यवहार पाने से यदि नोड आप खोज रहे हैं सबसे दायीं ओर का पत्ता है, या यह सबट्री में बिल्कुल भी नहीं है। इस बिंदु पर आप उपट्री में सभी नोड्स का दौरा करेंगे, इसलिए covers
ओ (एन) है, जहां एन पेड़ में नोड्स की संख्या है।
इसी तरह, commonAncestor
सबसे खराब मामले व्यवहार प्रदर्शित करता है जब p
और q
के पहले आम पूर्वज पेड़ में दाईं ओर गहरे नीचे हैं। इस मामले में, यह पहले दो बार covers
पर कॉल करेगा, दोनों मामलों में सबसे खराब समय व्यवहार प्राप्त करेगा। यह तो अपने आप को फिर से सही सबट्री, जो एक संतुलित पेड़ के मामले में आकार n/2
की है को कॉल करेंगे।
मान लिया जाये कि पेड़ संतुलित है, हम आवर्तन संबंध T(n) = T(n/2) + O(n)
द्वारा रन टाइम वर्णन कर सकते हैं। मास्टर प्रमेय का उपयोग करके, हमें संतुलित पेड़ के लिए उत्तर T(n) = O(n)
मिलता है।
अब, अगर पेड़ नहीं संतुलित है, हम सबसे खराब स्थिति में केवल सबट्री का आकार 1 द्वारा प्रत्येक पुनरावर्ती कॉल के लिए कम हो सकता है, पुनरावृत्ति T(n) = T(n-1) + O(n)
उपज। इस पुनरावृत्ति का समाधान T(n) = O(n^2)
है।
आप हालांकि इससे बेहतर कर सकते हैं।
उदाहरण के लिए, बजाय बस निर्धारण जो सबट्री p
या q
cover
साथ शामिल की, के p
और q
करने के लिए पूरे मार्ग का निर्धारण करते हैं। यह लेता है O(n)
सिर्फ cover
की तरह, हम बस में अधिक जानकारी रख रहे हैं। अब, उन पथों को समानांतर में पार करें और जहां वे अलग हो जाएं बंद करें। यह हमेशा O(n)
है।
यदि आपके पास प्रत्येक नोड से उनके माता-पिता के पॉइंटर्स हैं तो आप "पेड़-अप" पथ उत्पन्न करके इस पर भी सुधार कर सकते हैं, जिससे आप एक संतुलित पेड़ के लिए O(log n)
दे सकते हैं।
नोट यह एक अंतरिक्ष समय दुविधा यह है कि, के रूप में अपने कोड O(1)
अंतरिक्ष लेता है, इस एल्गोरिथ्म एक संतुलित पेड़ के लिए O(log n)
जगह है, और सामान्य रूप में O(n)
अंतरिक्ष ले जाता है।
मेरे पास एक प्रश्न है। आपके कथन में ... _let's_ _determine_ _the_ _entire_ _path_ _to_ 'p' _and_' q'। _This_ _takes_ 'ओ (एन)' _just_ _like_ 'कवर' ... रूट से नोड 'पी' के पथ को 'ओ (एन)' के बजाय 'ओ (लॉग एन)' नहीं लेना चाहिए? – Bhaskar
@ भास्कर। पथ वास्तव में लंबाई 'ओ (लॉग एन)' होगा, मानते हुए कि पेड़ मोटे तौर पर संतुलित है, लेकिन _finding_ इस पथ को 'ओ (एन)' लेता है क्योंकि आपको रूट से नोड खोजना है, और यह कहीं भी हो सकता है पेड़ में तो आपको इसे सबसे खराब मामले में खोजना होगा। यदि आपके पास नोड्स से उनके माता-पिता के पॉइंटर्स हैं, तो आप वास्तव में ऊपर से ट्रैवर्स करके 'ओ (लॉग एन)' में यह पथ पा सकते हैं। – hammar