कब गहराई-पहली खोज (DFS) बनाम चौड़ाई-प्रथम खोज (BFS) का उपयोग करना व्यावहारिक है? [बन्द है]


345

मैं डीएफएस और बीएफएस के बीच के अंतर को समझता हूं, लेकिन मुझे यह जानने में दिलचस्पी है कि एक से अधिक का उपयोग करने के लिए अधिक व्यावहारिक कब है?

क्या कोई भी उदाहरण दे सकता है कि डीएफएस बीएफएस को कैसे ट्रम्प करेगा और इसके विपरीत?


4
हो सकता है कि आप इस प्रश्न के लिए DFS और BFS के लिए पूर्ण शब्दों का उल्लेख कर सकते हों - लोगों को इन संक्षिप्ताक्षरों का पता नहीं होगा।
हंस-पीटर स्टोअर




नोट में BFS और DFS के कुछ एप्लिकेशन परिदृश्यों का उल्लेख है
Yossarian42

जवाबों:


353

यह खोज पेड़ की संरचना और समाधानों की संख्या और स्थान (उर्फ खोज-आइटम के लिए) पर बहुत निर्भर करता है।

  • यदि आप जानते हैं कि एक समाधान पेड़ की जड़ से बहुत दूर नहीं है, तो एक चौड़ाई पहली खोज (बीएफएस) बेहतर हो सकती है।
  • यदि पेड़ बहुत गहरा है और समाधान दुर्लभ हैं, तो गहराई से पहली खोज (डीएफएस) में बहुत लंबा समय लग सकता है, लेकिन बीएफएस तेज हो सकता है।

  • यदि पेड़ बहुत चौड़ा है, तो बीएफएस को बहुत अधिक मेमोरी की आवश्यकता हो सकती है, इसलिए यह पूरी तरह से अव्यावहारिक हो सकता है।

  • यदि समाधान अक्सर होते हैं लेकिन पेड़ में गहरे स्थित होते हैं, तो बीएफएस अव्यावहारिक हो सकता है।

  • यदि खोज ट्री बहुत गहरा है, तो आपको गहराई से पहली खोज (डीएफएस) के लिए खोज गहराई को सीमित करने की आवश्यकता होगी, वैसे भी (उदाहरण के लिए गहरा करने के साथ)।

लेकिन ये सिर्फ अंगूठे के नियम हैं; आपको शायद प्रयोग करने की आवश्यकता होगी।


4
AFAIK पुनरावृत्ति को आम तौर पर पुनरावृत्ति की तुलना में अधिक स्मृति की आवश्यकता होती है।
मारेक मार्जक

3
@MarekMarczak मैं वह नहीं देख पाया जो आप कहना चाहते हैं। यदि आप BFS को पुनरावृत्ति के रूप में लेते हैं - यदि समाधान स्थान आसानी से गणना योग्य नहीं है, तो आपको n + 1-th स्तर की गणना करने के लिए खोज ट्री के संपूर्ण n-th स्तर को स्मृति में संग्रहीत करना पड़ सकता है।
हंस-पीटर स्टॉर

11
@MarekMarczak DFS का पुनरावृत्त संस्करण स्टैक का उपयोग करता है। पुनरावृत्ति बनाम Iteration एक अलग विषय है।
क्लिंट डेयगो जू

एक और मामला जो ध्यान में आया: बीएफएस एक मामले में उपयोगी (आवश्यक) है जहां एक ग्राफ "अनंत" है। जैसे कहते हैं, एक शतरंज बोर्ड जो सभी दिशाओं में अनंत तक फैला हुआ है। डीएफएस कभी नहीं लौटेगा। बीएफएस को यह पता लगाने की गारंटी है कि क्या स्थिति संतोषजनक है, यह खोजना है।
thePartyTurtle

157

गहराई-पहली खोज

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

यहां छवि विवरण दर्ज करें

उदाहरण के लिए शतरंज, टिक-टैक-टो जैसे खेलों में जब आप निर्णय लेते हैं कि क्या कदम उठाना है, तो आप मानसिक रूप से एक कदम की कल्पना कर सकते हैं, फिर आपके प्रतिद्वंद्वी की संभावित प्रतिक्रियाएं, फिर आपकी प्रतिक्रियाएं, और इसी तरह। आप यह तय कर सकते हैं कि किस चाल को देखने से सबसे अच्छा परिणाम होता है।

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


पहले चौड़ाई खोजो

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

चौड़ाई-प्रथम खोज का उपयोग सहकर्मी से सहकर्मी नेटवर्क में पड़ोसी नोड्स को खोजने के लिए किया जा सकता है जैसे कि बिटटोरेंट, जीपीएस सिस्टम पास के स्थानों को खोजने के लिए, सोशल नेटवर्किंग साइटों को निर्दिष्ट दूरी और उस तरह की चीजों में लोगों को खोजने के लिए।


113

Http://www.programmerinterview.com/index.php/data-structures/dfs-vs-bb/ से अच्छा स्पष्टीकरण

बीएफएस का एक उदाहरण

यहां एक उदाहरण है कि बीएफएस कैसा दिखेगा। यह कुछ स्तर के ऑर्डर ट्री ट्रैवर्सल की तरह है, जहां हम IREATIVE दृष्टिकोण के साथ QUEUE का उपयोग करेंगे (अधिकतर रिकॉर्ड DFS के साथ समाप्त हो जाएगा)। संख्या उस क्रम को दर्शाती है जिसमें नोड्स को BFS में एक्सेस किया जाता है:

यहां छवि विवरण दर्ज करें

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

DFS का एक उदाहरण

यहाँ एक उदाहरण है कि DFS कैसा दिखेगा। मुझे लगता है कि बाइनरी ट्री में पोस्ट ऑर्डर ट्रैवर्सल पहले लीफ लेवल से काम शुरू करेगा। संख्या उस क्रम को दर्शाती है जिसमें नोड्स को डीएफएस में एक्सेस किया जाता है:

यहां छवि विवरण दर्ज करें

डीएफएस और बीएफएस के बीच अंतर

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

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

एक और उदाहरण फेसबुक है; दोस्तों के दोस्तों पर सुझाव। हमें सुझाव के लिए तत्काल मित्रों की आवश्यकता है जहां हम BFS का उपयोग कर सकते हैं। सबसे छोटा रास्ता ढूंढना या चक्र का पता लगाना (पुनरावृत्ति का उपयोग करना) हम DFS का उपयोग कर सकते हैं।


"बाइनरी ट्री में पोस्ट ऑर्डर ट्रैवर्सल" क्या है?
काइल डेलानी

8
क्या DFS को BFS की तुलना में सबसे छोटा रास्ता बेहतर लगता है? मुझे लगता है कि यह दूसरा तरीका है। मुझे लगता है कि BFS सबसे छोटा रास्ता खोजता है। है ना?
नवीन गेब्रियल

1
अगर आपने स्रोत को क्रेडिट दिया होता तो अधिक सराहना होती। तुलनात्मक हिस्सा नरसिम्हा करुमची द्वारा "जावा में आसान किए गए डेटा स्ट्रक्चर्स" से लिया गया है।
learntogrow-growtolearn

निश्चित रूप से मैं इसे अपडेट कर सकता हूं, लेकिन यहां किसी की सराहना की उम्मीद नहीं है। बस मेरे जैसे गरीब टेकी की मदद करना चाहते हैं।
कानागावेलु सुगुमार

1
@KyleDelaney तीन आदेश हैं जिनमें आप एक पेड़ को पार कर सकते हैं - पूर्व-आदेश, इनवर्टर और पोस्टऑर्डर। वे क्रमशः उपसर्ग infix और postfix संकेतन के अनुरूप हैं। जब आप पेड़ को नीचे फेंकते हैं और फिर वापस ऊपर जाते हैं, यदि आप पहली बार एक नोड उठाते हैं तो आप इसे पूर्व-क्रम पर जाते हैं, अगर दूसरी बार यह इनवर्टर है, अगर पिछली बार यह पोस्टऑर्डर है। आप वास्तव में इस तरह से पेड़ को क्रमबद्ध कर सकते हैं और जब तक आप अपने द्वारा उपयोग किए गए आदेश को याद करते हैं तब तक आप वृक्षारोपण से वृक्ष का पुनर्निर्माण कर सकते हैं।
डेव

43

चौड़ाई फर्स्ट सर्च आम तौर पर सबसे अच्छा तरीका है जब पेड़ की गहराई अलग-अलग हो सकती है, और आपको केवल समाधान के लिए पेड़ के हिस्से को खोजना होगा। उदाहरण के लिए, प्रारंभिक मूल्य से अंतिम मूल्य तक का सबसे छोटा रास्ता बीएफएस का उपयोग करने के लिए एक अच्छी जगह है।

जब आप पूरे पेड़ की खोज करने की आवश्यकता होती है तब गहराई पहले खोज का उपयोग आमतौर पर किया जाता है। बीएफएस की तुलना में इसे लागू करना (पुनरावृत्ति का उपयोग करना) आसान है, और इसके लिए कम राज्य की आवश्यकता होती है: जबकि बीएफएस के लिए आपको संपूर्ण 'फ्रंटियर' स्टोर करने की आवश्यकता होती है, डीएफएस को केवल आपको वर्तमान तत्व के मूल नोड्स की सूची को स्टोर करने की आवश्यकता होती है।


26

DFS BFS से अधिक स्थान-कुशल है, लेकिन अनावश्यक गहराई तक जा सकता है।

उनके नाम का खुलासा कर रहे हैं: अगर वहाँ एक बड़ी चौड़ाई (यानी बड़ी शाखा कारक) है, लेकिन बहुत सीमित गहराई (उदाहरण के लिए "चाल" की सीमित संख्या), तो DFS BFS के लिए अधिक बेहतर हो सकता है।


IDDFS पर

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


1
यह जरूरी नहीं कि अधिक कुशल स्थान हो .. उदाहरण के लिए पथ ग्राफ पर विचार करें।
आरबी

16

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

यदि आप नोड्स में "पहले से ही देखे गए" जानकारी संग्रहीत कर रहे हैं, तो एक गैर-उन्मुख ग्राफ़ के लिए गहराई-पहली खोज यहाँ है:

def dfs(origin):                               # DFS from origin:
    origin.visited = True                      # Mark the origin as visited
    for neighbor in origin.neighbors:          # Loop over the neighbors
        if not neighbor.visited: dfs(next)     # Visit each neighbor if not already visited

यदि एक अलग डेटा संरचना में "पहले से ही देखी गई" जानकारी संग्रहीत करना:

def dfs(node, visited):                        # DFS from origin, with already-visited set:
    visited.add(node)                          # Mark the origin as visited
    for neighbor in node.neighbors:            # Loop over the neighbors
        if not neighbor in visited:            # If the neighbor hasn't been visited yet,
            dfs(node, visited)                 # then visit the neighbor
dfs(origin, set())

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



5

बीएफएस के लिए, हम फेसबुक उदाहरण पर विचार कर सकते हैं। हमें अन्य मित्रों के प्रोफ़ाइल से FB प्रोफ़ाइल से मित्रों को जोड़ने का सुझाव मिलता है। मान लीजिए कि A-> B, जबकि B-> E और B-> F है, तो A को E और F का सुझाव मिलेगा। उन्हें दूसरे स्तर तक पढ़ने के लिए BFS का उपयोग करना होगा। DFS उन परिदृश्यों पर आधारित है जहां हम स्रोत से गंतव्य तक डेटा के आधार पर कुछ पूर्वानुमान लगाना चाहते हैं। जैसा कि पहले ही शतरंज या सुडोकू के बारे में बताया गया है। एक बार जब मैं यहां अलग हो जाता हूं, तो मेरा मानना ​​है कि डीएफएस का इस्तेमाल सबसे छोटे रास्ते के लिए किया जाना चाहिए क्योंकि डीएफएस पहले पूरे रास्ते को कवर करेगा, फिर हम सबसे अच्छा फैसला कर सकते हैं। लेकिन जैसा कि बीएफएस लालची दृष्टिकोण का उपयोग करेगा, ऐसा हो सकता है कि यह अपने सबसे छोटे रास्ते की तरह दिखे, लेकिन अंतिम परिणाम भिन्न हो सकता है। मुझे बताएं कि क्या मेरी समझ गलत है।


अब मेरी टिप्पणी थोड़ी देर की है। लेकिन सबसे छोटा रास्ता खोजने के लिए, बीएफएस का उपयोग किया जाना चाहिए। हालाँकि, "DFS उन परिदृश्यों पर आधारित है, जहाँ हम डेटा के आधार पर कुछ ऐसा पूर्वानुमान लगाना चाहते हैं, जो हमारे पास स्रोत से गंतव्य तक है" यह एक शानदार बात है! कुडोस !!
Oskarzito

4

कुछ एल्गोरिदम काम करने के लिए DFS (या BFS) के विशेष गुणों पर निर्भर करते हैं। उदाहरण के लिए 2-जुड़े घटकों को खोजने के लिए हॉपक्रॉफ्ट और टार्जन एल्गोरिथ्म इस तथ्य का लाभ उठाते हैं कि डीएफएस द्वारा सामना किए गए प्रत्येक पहले से देखे गए नोड रूट से वर्तमान में खोजे गए नोड के रास्ते पर हैं।


4

निम्नलिखित एक व्यापक उत्तर है कि आप क्या पूछ रहे हैं।

समान्य शब्दों में:

चौड़ाई प्रथम खोज (BFS) एल्गोरिथ्म, इसके नाम "चौड़ाई" से, नोड के सभी पड़ोसियों को नोड के बाहरी किनारों के माध्यम से पता चलता है, फिर यह पहले से उल्लेख किए गए पड़ोसियों के बाहर के पड़ोसियों को उनके किनारों के माध्यम से और बाद में, सभी तक पता चलता है मूल स्रोत से पहुंच योग्य नोड्स का दौरा किया जाता है (यदि कोई शेष नोड्स और इसके आगे शेष हैं तो हम जारी रख सकते हैं और एक और मूल स्रोत ले सकते हैं)। इसीलिए इसका उपयोग एक नोड (मूल स्रोत) से दूसरे नोड के लिए सबसे कम पथ (यदि कोई है) को खोजने के लिए किया जा सकता है यदि किनारों का वजन एक समान है।

डेप्थ फर्स्ट सर्च (डीएफएस) एल्गोरिथ्म, इसके नाम "डेप्थ" से, इसके हाल के किनारों के माध्यम से सबसे हाल ही में खोजे गए नोड x के परिकल्पित पड़ोसियों को पता चलता है। यदि नोड x से कोई भी अपरिचित पड़ोसी नहीं है, तो एल्गोरिथ्म नोड के अपरिचित पड़ोसियों (इसके किनारों के माध्यम से) की खोज करने के लिए पीछे हटता है, जिसमें से नोड x की खोज की गई थी, और इसके बाद तक, मूल स्रोत से पहुंच योग्य सभी नोड्स का दौरा किया गया था (हम जारी रख सकते हैं और एक और मूल स्रोत ले सकते हैं यदि शेष अप्रकाशित नोड और आगे हैं)।

BFS और DFS दोनों अधूरे हो सकते हैं। उदाहरण के लिए यदि किसी नोड का ब्रांचिंग कारक अनंत है, या संसाधनों (मेमोरी) के लिए समर्थन के लिए बहुत बड़ा है (उदाहरण के लिए जब नोड्स को अगले खोजा जा रहा है), तो बीएफएस पूर्ण नहीं है, भले ही खोज की गई दूरी पर हो मूल स्रोत से कुछ किनारों की। यह अनंत ब्रांचिंग कारक खोज के लिए दिए गए नोड से अनंत विकल्पों (पड़ोसी नोड्स) के कारण हो सकता है। यदि गहराई अनंत है, या संसाधनों (मेमोरी) के लिए बहुत बड़ा है (जैसे जब नोड्स को अगले खोजा जा सकता है), तो डीएफएस पूरा नहीं होता है, भले ही खोज की गई कुंजी मूल स्रोत का तीसरा पड़ोसी हो। यह अनंत गहराई एक ऐसी स्थिति के कारण हो सकती है जहां हर नोड के लिए एल्गोरिथ्म पता चलता है, कम से कम एक नया विकल्प (पड़ोसी नोड) जो पहले से अनविजिट है।

इसलिए, हम BFS और DFS का उपयोग करते समय निष्कर्ष निकाल सकते हैं। मान लीजिए कि हम एक प्रबंधनीय सीमित शाखाओं के कारक और एक प्रबंधनीय सीमित गहराई के साथ काम कर रहे हैं। यदि खोजा गया नोड उथला है यानी मूल स्रोत से कुछ किनारों के बाद पहुंच योग्य है, तो बीएफएस का उपयोग करना बेहतर है। दूसरी ओर, अगर खोजा गया नोड गहरा है यानी मूल स्रोत से बहुत किनारों के बाद पहुंच योग्य है, तो एफएफ का उपयोग करना बेहतर है।

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

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

अंत में अगर हमारे पास अनंत गहराई और अनंत शाखा कारक है, तो हम Iterative Deepening Search (IDS) का उपयोग कर सकते हैं।


2

डीएफएस और बीएफएस के गुणों के अनुसार। उदाहरण के लिए, जब हम सबसे छोटा रास्ता खोजना चाहते हैं। हम आमतौर पर bfs का उपयोग करते हैं, यह 'सबसे छोटा' की गारंटी दे सकता है। लेकिन dfs केवल गारंटी दे सकते हैं कि हम इस बिंदु से आ सकते हैं, उस बिंदु को प्राप्त कर सकते हैं, 'सबसे कम' की गारंटी नहीं दे सकते।


2

मुझे लगता है कि यह इस बात पर निर्भर करता है कि आप किन समस्याओं का सामना कर रहे हैं।

  1. सरल ग्राफ पर सबसे छोटा रास्ता -> बीएफएस
  2. सभी संभावित परिणाम -> dfs
  3. ग्राफ़ पर खोज करें (ट्री का चित्रण करें, मार्टिक्स को ग्राफ़ के रूप में भी देखें) -> dfs ....

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

1

क्योंकि डेप्थ-फर्स्ट सर्च एक स्टैक का उपयोग करते हैं क्योंकि नोड्स संसाधित होते हैं, डीएफएस के साथ बैकट्रैकिंग प्रदान की जाती है। क्योंकि चौड़ाई-प्रथम खोजें एक कतार का उपयोग करती हैं, एक स्टैक का नहीं, नोड्स को संसाधित करने का ट्रैक रखने के लिए, BFS के साथ बैकट्रैकिंग प्रदान नहीं की जाती है।


1

जब पेड़ की चौड़ाई बहुत बड़ी होती है और गहराई कम होती है तो DFS का उपयोग करें क्योंकि रिकर्सन स्टैक ओवरफ्लो नहीं होगा। तब BFS जब चौड़ाई कम होती है और पेड़ को पीछे करने के लिए गहराई बहुत बड़ी होती है।


0

यह प्रदर्शित करने के लिए एक अच्छा उदाहरण है कि बीएफएस कुछ मामलों में डीएफएस से बेहतर है। https://leetcode.com/problems/01-matrix/

जब सही ढंग से लागू किया जाता है, तो दोनों समाधानों को उन कोशिकाओं का दौरा करना चाहिए जिनकी वर्तमान सेल +1 की तुलना में अधिक दूरी है। लेकिन DFS अक्षम है और बार-बार O (n * n) जटिलता के परिणामस्वरूप एक ही सेल का दौरा किया।

उदाहरण के लिए,

1,1,1,1,1,1,1,1, 
1,1,1,1,1,1,1,1, 
1,1,1,1,1,1,1,1, 
0,0,0,0,0,0,0,0,

0

यह उस स्थिति पर निर्भर करता है जिसमें इसका उपयोग किया जाता है। जब भी हमें किसी ग्राफ को ट्रेस करने की समस्या होती है, तो हम इसे किसी उद्देश्य के लिए करते हैं। जब एक अनवॉन्टेड ग्राफ में सबसे छोटा रास्ता खोजने की समस्या होती है, या यह पता लगाना कि क्या ग्राफ द्विभाजित है, हम FFS का उपयोग कर सकते हैं। साइकिल का पता लगाने या बैकट्रैकिंग की आवश्यकता वाले किसी भी तर्क की समस्याओं के लिए, हम DFS का उपयोग कर सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.