2014-05-05 10 views
5

मुझे इस ऑनलाइन का कोई जवाब नहीं मिल रहा है, और इसके समान प्रश्नों के अन्य उत्तरों में ऐसा लगता है कि डीएफएस का लाभ यह है कि यह डीएफएस की तुलना में कम स्मृति का उपयोग करता है।पहली बार चौड़ाई पहले खोज की तुलना में अधिक मेमोरी का उपयोग क्यों करती है?

मेरे लिए यह मेरी अपेक्षा के विपरीत लगता है। एक बीएफएस को केवल उस अंतिम नोड को स्टोर करना होता है जिसे उसने देखा था। उदाहरण के लिए अगर हम नीचे पेड़ में संख्या 7 के लिए खोज रहे हैं:

enter image description here

यह मूल्य 8, फिर 3, 10, 1, 6, 14, 4 के साथ नोड खोज करेंगे तो अंत में 7। एक डीएफएस के लिए यह नोड को 8 के साथ खोज करेगा, फिर 3, 1, 6, 4, फिर अंत में 7.

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

तो बीएफएस वास्तव में कम स्मृति का उपयोग क्यों करता है?

+0

एक पूर्ण पेड़ आम तौर पर लंबा होने से अधिक व्यापक होगा। यदि आपका उदाहरण पेड़ भरा हुआ था, तो आपके पास नीचे के स्तर पर 8 नोड्स होंगे। डीएफएस में, आपको केवल एक ढेर की आवश्यकता होगी जो गहरे स्तर के रूप में गहरा है। बीएफएस में, आपको एक कतार की आवश्यकता है जो व्यापक स्तर के रूप में व्यापक है। –

+1

डीएफएस की अंतरिक्ष जटिलता ओ (डी) है जहां डी [व्यास] (http://en.wikipedia.org/wiki/Distance_ (graph_theory) #Related_concepts) ग्राफ का है। बीएफएस का ओ ओ (डब्ल्यू) है, जहां डब्ल्यू अधिकतम संख्या में वर्टेक्स है जो प्रारंभ नोड के लिए एक ही दूरी है। यह ग्राफ संरचना पर निर्भर करता है जो दोनों में से अधिक कुशल है। –

उत्तर

9

या तो खोज विधि लिखी जा सकती है ताकि इसे केवल पिछले नोड का ट्रैक रखना पड़े, लेकिन फिर डीएफएस बीएफएस की तुलना में अधिक कुशल है।

डीएफएस को केवल एक स्तर पर यात्रा करना है ताकि यह पता चल सके कि पास नोड्स हैं या नहीं। यह गर्त खोज करने के लिए उन सभी को इस क्रम में नोड्स के माध्यम से चलते हैं: जब भी यह पेड़ के दूसरे आधे को जाता है

8-3-1-3-6-4-6-7-6-3-8-10-14-13-14-10-8 

BFS पेड़ नीचे शीर्ष करने के लिए नीचे से ऊपर तक यात्रा करते हैं और करने के लिए है। यह इस क्रम में नोड्स के माध्यम से चलते हैं:

8-3-8-10-8-3-1-3-6-3-8-10-14-10-8-3-1-6-4-6-7-6-3-8-10-14-13-14-10-8 

(मैं कुछ नहीं कर रहा हूँ कि अगर पूरा हो गया है, हालांकि, शायद यह भी वहाँ कोई और अधिक कर रहे हैं कि पता लगाने के लिए कुछ और समय के ऊपर और नीचे यात्रा करते हैं और करने के लिए है अंतिम स्तर पर नोड्स।)

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

यदि आप एल्गोरिदम को अधिक कुशल बनाने के लिए और अधिक मेमोरी का उपयोग करना चाहते हैं, तो वे लगभग समान दक्षता वाले होते हैं, मूल रूप से केवल एक बार प्रत्येक नोड के माध्यम से जा रहे हैं। डीएफएस को कम स्मृति की आवश्यकता होती है क्योंकि इसे केवल शीर्ष से नीचे तक श्रृंखला में नोड्स का ट्रैक रखना होता है, जबकि बीएफएस को उसी स्तर पर सभी नोड्स का ट्रैक रखना होता है।

उदाहरण के लिए, 1023 नोड्स के साथ एक (संतुलित) पेड़ में डीएफएस को 10 नोड्स का ट्रैक रखना होता है, जबकि बीएफएस को 512 नोड्स का ट्रैक रखना होता है।

+2

डाउनवोट क्यों? यदि आप यह नहीं समझते कि यह क्या है जो आपको लगता है कि गलत है, तो यह उत्तर में सुधार नहीं कर सकता है। – Guffa

2

सामान्य रूप से यह विशेष ग्राफ के आधार पर हो सकता है या नहीं भी हो सकता है।

एक गहराई से पहली खोज एक ढेर का उपयोग करती है, जिसमें रूट से नोड को नोड में खोजा जाता है। तो ग्राफ के अधिकांश त्रिज्या में।

एक चौड़ाई पहली खोज एक कतार का उपयोग करती है, जिसमें खोज के सामने नोड्स होते हैं। तो दूरी पर सभी नोड्स डी पर।

सामान्य ग्राफ में आप बस इतना कह सकते हैं कि यह किसी भी मामले में पेड़ में अधिकांश नोड्स पर है।

लेकिन अगर आप एक संतुलित (या ज्यादातर तो) कश्मीर -ary पेड़ है, यह गहराई, यानी त्रिज्या है, केवल हे हो जाएगा (लॉग (n)), सबसे कम परत हे शामिल होंगे, जबकि (n) नोड्स (एन/2 बाइनरी पेड़ के लिए और उच्चतर डिग्री के लिए और भी अधिक)।

तो गहराई-पहले खोज केवल ओ (लॉग (n)) स्मृति और चौड़ाई-पहले खोज का उपयोग ओ (n) का उपयोग करेगा। संतुलित के-पेड़ के लिए; अन्य मामलों के लिए अलग-अलग परिणाम संभव हैं (लेकिन अधिकांश सामान्य ग्राफ व्यास के लिए परिधि से काफी कम होगा)।

14

बीएफएस हमेशा अधिक मेमोरी का उपयोग नहीं करता है। आपके पास पेड़, विशेष रूप से, एक उदाहरण है जहां नहीं है।

इस पेड़ पर विचार करें: (source)

BFS साथ

, कुछ स्तर पर, 8-15 से सभी नोड्स स्मृति में होगा।

डीएफएस के साथ

, आप स्मृति में 4 से अधिक नोड्स (पेड़ की ऊंचाई के बराबर) की आवश्यकता नहीं है जाएगा।

अंतर एक बहुत बुरा के रूप में पेड़ बड़ा हो जाता है (जब तक यह काफी पूर्ण रहता है के रूप में) हो जाता है।

अधिक विशेष रूप से, BFS O(branchingFactor^maxDepth) या O(maxWidth) स्मृति है, जहां के रूप में डीएफएस केवल O(maxDepth) का उपयोग करता है का उपयोग करता है।

यदि maxWidth < maxDepth, बीएफएस को कम स्मृति का उपयोग करना चाहिए (माना जाता है कि आप दोनों के लिए समान प्रतिनिधित्व का उपयोग करते हैं), लेकिन यह शायद ही कभी सच है।

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