32

मैं पढ़ने के बारे में पुनरावृत्ति को मजबूत बनाने रखने के लिए, लेकिन मुझे समझ नहीं आता कि यह कैसे गहराई-पहले खोज से अलग है।Iterative मजबूत बनाने बनाम गहराई-पहले खोज

मुझे समझ में आया कि गहराई की पहली खोज गहरी और गहरी हो रही है।

पुनरावृत्ति गहराई में आप उस स्तर पर कोई समाधान स्थापित करते हैं, यदि उस स्तर पर कोई समाधान नहीं है, तो आप उस मान को बढ़ाते हैं, और स्क्रैच (रूट) से फिर से शुरू करते हैं।

क्या यह गहराई की पहली खोज के समान नहीं होगा?

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

+1

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

उत्तर

74

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

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

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

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

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

संक्षेप में:

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

आशा है कि इससे मदद मिलती है!

+1

धन्यवाद! मैं इस अवधारणा को याद कर रहा था कि पुनरावृत्ति गहराई लंबाई x के सभी पथों पर विचार करेगी। – bb2

+4

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

+0

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

2

इस बारे में wikipedia पर एक सभ्य पृष्ठ है।

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

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

1

बस पहले से यहां क्या जोड़ रहा है, लेकिन यहां डेनवर की मूविंग एआई लैब विश्वविद्यालय से कुछ वीडियो हैं जो मतभेद दिखाते हैं।

http://movingai.com/dfid.html

आप उनके उदाहरणों में देख सकते चलने का गहरा जीत लक्ष्य उथले (समाधान गहराई 3, पेड़ गहराई) है कि कब और समाधान सही पर है, लेकिन डीएफएस कोई बात नहीं क्या करता है, तो समाधान में है जीत आखिरी पंक्ति

मुझे शतरंज प्रोग्रामिंग के बारे में इस पठन में मिला, मेरे लिए अगली बार quiescence search के बारे में सोच रहा था कि क्या आप एआई प्रोग्रामिंग के लिए खोज रणनीतियों के बारे में और जानना चाहते हैं।

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