2010-05-12 23 views
7

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

क्या कुछ दिशानिर्देश हैं, जहां कोई अन्य या किसी भी विचार से बेहतर प्रदर्शन करता है?

बहुत बहुत धन्यवाद।

उत्तर

17

यदि आप कम से कम चरणों के साथ समाधान ढूंढना चाहते हैं या यदि आपके पेड़ की अनंत ऊंचाई (या बहुत बड़ी) है तो आपको पहले चौड़ाई का उपयोग करना चाहिए।

यदि आपके पास एक सीमित पेड़ है और स्मृति की सबसे छोटी मात्रा का उपयोग करके सभी संभावित समाधानों को पार करना चाहते हैं तो आपको पहले गहराई का उपयोग करना चाहिए।

यदि आप खेलने के लिए सबसे अच्छा शतरंज कदम खोज रहे हैं तो आप iterative deepening का उपयोग कर सकते हैं जो दोनों का संयोजन है।

आईडीडीएफएस गहराई से पहली खोज की अंतरिक्ष दक्षता और चौड़ाई-पहली खोज की पूर्णता को जोड़ती है (जब शाखाकरण कारक सीमित होता है)।

+0

शतरंज में आप औसत शाखाकरण कारक को अपने वर्ग रूट में कम करने के लिए अल्फा-बीटा छंटनी के साथ गहराई से उपयोग करना चाहते हैं। पुनरावृत्ति गहराई भी जोड़ा जा सकता है। अच्छा जवाब हालांकि +1 – phkahler

1

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

जब आप सबसे छोटा रास्ता खोजना चाहते हैं, तो बीएफएस एक प्राकृतिक विकल्प है।

यदि आपका ग्राफ अनंत या प्रो व्याकरणिक रूप से जेनरेट किया गया है, तो संभवतः आप निकटवर्ती नोड्स से पहले दूरस्थ नोड्स की खोज करने की लागत निषिद्ध होने से पहले निकट परतों को खोजना चाहते हैं।

यदि स्मृति/डिस्क/इलाके के मुद्दों के कारण अधिक रिमोट नोड्स का उपयोग करना अधिक महंगा होगा, तो बीएफएस फिर से बेहतर हो सकता है।

1

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

0

यदि आप एक पेड़ को पार कर रहे हैं, तो गहराई पहले इसकी गहराई के लिए आनुपातिक स्मृति का उपयोग करेगा। यदि पेड़ उचित रूप से संतुलित है (या इसकी गहराई पर कुछ अन्य सीमा है), तो रिकर्सिव गहराई-पहले ट्रैवर्सल का उपयोग करना सुविधाजनक हो सकता है।

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

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

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