बीच क्या अंतर है ग्राफ खोज और पेड़ खोज में संस्करणों डीएफएस के बारे में, ए * खोजें कृत्रिम बुद्धि ?
बीच क्या अंतर है ग्राफ खोज और पेड़ खोज में संस्करणों डीएफएस के बारे में, ए * खोजें कृत्रिम बुद्धि ?
जवाबों:
मौजूदा जवाबों को देखते हुए, इस अवधारणा के बारे में बहुत भ्रम की स्थिति है।
पेड़ की खोज और ग्राफ खोज के बीच अंतर इस तथ्य में निहित नहीं है कि क्या समस्या ग्राफ एक पेड़ या सामान्य ग्राफ है। यह हमेशा माना जाता है कि आप सामान्य ग्राफ़ के साथ काम कर रहे हैं। भेद उस ट्रॉवल पैटर्न में निहित है जिसका उपयोग ग्राफ़ के माध्यम से खोज करने के लिए किया जाता है, जो ग्राफ़ के आकार या पेड़ के आकार का हो सकता है।
यदि आप एक पेड़ के आकार की समस्या से निपट रहे हैं , तो दोनों एल्गोरिथ्म वेरिएंट के बराबर परिणाम देते हैं। तो आप सरल पेड़ खोज संस्करण को चुन सकते हैं।
आपका मूल ग्राफ़ खोज एल्गोरिथ्म निम्नलिखित जैसा कुछ दिखता है। एक शुरुआती नोड के साथ start
, निर्देशित किनारों के रूप में successors
और goal
लूप स्थिति में उपयोग किए गए विनिर्देश। open
स्मृति में नोड्स हैं, जो वर्तमान में विचाराधीन हैं, खुली सूची । ध्यान दें कि निम्नलिखित छद्म कोड हर पहलू (2) में सही नहीं है।
open <- []
next <- start
while next is not goal {
add all successors of next to open
next <- select one node from open
remove next from open
}
return next
आपके द्वारा लागू किए जाने के आधार पर select from open
, आप खोज एल्गोरिदम के विभिन्न प्रकार प्राप्त करते हैं, जैसे गहराई-पहली खोज (DFS) (नवीनतम तत्व चुनें), चौड़ाई पहली खोज (BFS) (सबसे पुराना तत्व चुनें) या समान लागत खोज (सबसे कम पथ लागत वाला तत्व चुनें) ), लोकप्रिय ए-स्टार खोज सबसे कम लागत के साथ नोड को चुनने के साथ हीरिविस्टिक मूल्य, और इसी तरह।
ऊपर वर्णित एल्गोरिदम को वास्तव में ट्री सर्च कहा जाता है । यह कई बार अंतर्निहित समस्या ग्राफ की स्थिति का दौरा करेगा, यदि प्रारंभ राज्य में इसके लिए कई निर्देशित मार्ग हैं। एक निर्देशित लूप पर स्थित होने पर, अनंत बार किसी राज्य की यात्रा करना संभव है। लेकिन प्रत्येक यात्रा हमारे खोज एल्गोरिदम द्वारा उत्पन्न वृक्ष में एक अलग नोड से मेल खाती है । यह स्पष्ट अक्षमता कभी-कभी वांछित होती है, जैसा कि बाद में बताया गया है।
जैसा कि हमने देखा, पेड़ की खोज कई बार राज्य का दौरा कर सकती है। और इस तरह यह कई बार इस राज्य के बाद पाए जाने वाले "उप वृक्ष" की खोज करेगा, जो महंगा हो सकता है। ग्राफ़ खोज एक बंद सूची में सभी विज़िट किए गए राज्यों का ट्रैक रखकर इसे ठीक करता है । यदि एक नया पाया गया उत्तराधिकारी next
पहले से ही जाना जाता है, तो उसे खुली सूची में नहीं डाला जाएगा:
open <- []
closed <- []
next <- start
while next is not goal {
add next to closed
add all successors of next to open, which are not in closed
remove next from open
next <- select from open
}
return next
हम देखते हैं कि ग्राफ़ खोज में अधिक मेमोरी की आवश्यकता होती है, क्योंकि यह सभी विज़िट किए गए राज्यों का ट्रैक रखता है। इसकी भरपाई छोटी खुली सूची से हो सकती है, जिसके परिणामस्वरूप खोज क्षमता में सुधार होता है।
लागू करने के कुछ तरीके select
इष्टतम समाधान वापस करने की गारंटी दे सकते हैं - यानी कम से कम लागत के साथ एक रास्ता या पथ (किनारों से जुड़ी लागत के साथ रेखांकन के लिए)। यह मूल रूप से धारण करता है जब भी बढ़ती लागत के क्रम में नोड्स का विस्तार किया जाता है, या जब लागत एक नोजेरो धनात्मक स्थिरांक होती है। एक सामान्य एल्गोरिथ्म जो इस तरह के चयन को लागू करता है, वह है समान लागत खोज , या यदि चरण लागत समान हैं, तो BFS या IDDFS । आईडीडीएफएस बीएफएस की आक्रामक मेमोरी की खपत से बचा जाता है और आमतौर पर बिना किसी खोज के लिए सिफारिश की जाती है (जब स्टेप साइज स्थिर हो तो उर्फ ब्रूट फोर्स)।
इसके अलावा (बहुत लोकप्रिय) A * ट्री सर्च एल्गोरिदम एक इष्टतम समाधान देता है जब एक स्वीकार्य हेयुरिस्टिक के साथ उपयोग किया जाता है । हालांकि, ए * ग्राफ खोज एल्गोरिथ्म, केवल इस गारंटी देता है जब यह एक सुसंगत (या "मोनोटोनिक") हेयुरिस्टिक ( प्रशंसा की तुलना में मजबूत स्थिति ) के साथ प्रयोग किया जाता है ।
सादगी के लिए, प्रस्तुत कोड नहीं है:
state
या नहीं , यह संदर्भ पर निर्भर करता है। लेकिन समस्या ग्राफ वर्टिकल के लिए और ट्रैवर्सल ग्राफ के लिए उपयोग करने से निश्चित रूप से उत्तर की स्पष्टता में सुधार हो सकता है। मैं जल्द ही इसे फिर से लिखने की कोशिश करूंगा। धन्यवाद। node
state
node
एक पेड़ एक ग्राफ का एक विशेष मामला है, इसलिए पेड़ों के लिए सामान्य रेखांकन के लिए जो भी काम करता है। एक पेड़ एक ग्राफ है जहां नोड्स के प्रत्येक जोड़े के बीच एक पथ होता है। इसका तात्पर्य यह है कि इसमें कोई चक्र शामिल नहीं है, जैसा कि पिछले उत्तर में बताया गया है, लेकिन चक्रों के बिना एक निर्देशित ग्राफ (एक डीएजी, निर्देशित एसाइक्लिक ग्राफ) आवश्यक रूप से एक पेड़ नहीं है।
हालाँकि, यदि आप जानते हैं कि आपके ग्राफ़ में कुछ प्रतिबंध हैं, जैसे कि यह एक पेड़ या DAG है, तो आप आमतौर पर अप्रतिबंधित ग्राफ़ की तुलना में कुछ अधिक कुशल खोज एल्गोरिदम पा सकते हैं। उदाहरण के लिए, संभवतः ए *, या इसके गैर-हेयुरिस्टिक समकक्ष "डीजकस्ट्रा के एल्गोरिथ्म" का उपयोग करने का कोई मतलब नहीं है, एक पेड़ पर (जहां वैसे भी चुनने के लिए केवल एक ही रास्ता है, जिसे आप डीएफएस या डीएफएस द्वारा पा सकते हैं) या DAG पर (जहाँ सामयिक छँटनी द्वारा प्राप्त क्रम में शीर्षकों पर विचार करके एक इष्टतम मार्ग पाया जा सकता है)।
के रूप में निर्देशित बनाम अनिर्दिष्ट, एक अनिर्दिष्ट ग्राफ एक निर्देशित एक, अर्थात् मामले अगर वहाँ से बढ़त (लिंक, संक्रमण) है कि शासन "इस प्रकार की एक विशेष मामला है यू करने के लिए वी वहाँ भी से बढ़त वी करने के लिए यू ।
अद्यतन : ध्यान दें कि यदि आप जिस चीज की परवाह करते हैं वह ग्राफ की संरचना के बजाय खोज का ट्रैवर्सल पैटर्न है, तो यह उत्तर नहीं है। देखें, उदाहरण के लिए, @ ziggystar का उत्तर।
एक ग्राफ और एक पेड़ के बीच एकमात्र अंतर चक्र है । एक ग्राफ में चक्र हो सकता है, एक पेड़ नहीं हो सकता। इसलिए जब आप एक पेड़ पर एक खोज एल्गोरिथ्म को लागू करने जा रहे हैं, तो आपको चक्रों के अस्तित्व पर विचार करने की आवश्यकता नहीं है, लेकिन जब एक मनमाना ग्राफ के साथ काम करते हैं, तो आपको उन पर विचार करने की आवश्यकता होगी। यदि आप चक्र नहीं संभालते हैं, तो एल्गोरिथ्म अंततः एक अनंत लूप या एक अंतहीन पुनरावृत्ति में पड़ सकता है।
सोचने का एक और बिंदु उस ग्राफ़ के दिशात्मक गुण हैं जो आप के साथ काम कर रहे हैं। ज्यादातर मामलों में हम उन पेड़ों से निपटते हैं जो प्रत्येक किनारे पर माता-पिता के बच्चे के संबंधों का प्रतिनिधित्व करते हैं। एक DAG (निर्देशित एसाइक्लिक ग्राफ) भी इसी तरह की विशेषताओं को दर्शाता है। लेकिन द्वि-दिशात्मक रेखांकन अलग हैं। द्वि-दिशात्मक ग्राफ़ में प्रत्येक किनारे दो पड़ोसियों का प्रतिनिधित्व करता है। इसलिए इन दो प्रकार के रेखांकन के लिए एल्गोरिथम दृष्टिकोण थोड़ा भिन्न होना चाहिए।
GRAPH VS TREE
लेकिन एआई ग्राफ-सर्च बनाम ट्री-सर्च के मामले में
ग्राफ़ खोज की एक अच्छी संपत्ति है कि जब भी एल्गोरिथ्म एक नया नोड का पता लगाता है और इसे चिह्नित करता है, तो यह "विज़िट किए गए एल्गोरिथम के बावजूद" के रूप में चिह्नित करता है, एल्गोरिथ्म आमतौर पर वर्तमान नोड से पहुंच योग्य अन्य सभी नोड्स की पड़ताल करता है।
उदाहरण के लिए 3 शीर्षकों AB और C के साथ निम्नलिखित ग्राफ पर विचार करें, और निम्नलिखित किनारों पर विचार करें
AB, BC और CA, खैर C से A तक एक चक्र है,
और जब A से DFS शुरू होता है, तो A एक नया राज्य B उत्पन्न करेगा, B एक नया राज्य C उत्पन्न करेगा, लेकिन जब C की खोज की जाती है तो एल्गोरिथ्म एक नया राज्य A उत्पन्न करने का प्रयास करेगा, लेकिन A का दौरा पहले ही हो चुका है, इसलिए इसे अनदेखा किया जाएगा। ठंडा!
लेकिन पेड़ों का क्या? अच्छी तरह से पेड़ों के एल्गोरिथ्म का दौरा किया नोड के रूप में चिह्नित नहीं है, लेकिन पेड़ों को चक्र नहीं है, यह एक अनंत छोरों में कैसे मिलेगा?
इस ट्री को 3 चक्कर लगाकर निम्नलिखित किनारों पर विचार करें
ए - बी - सी नीचे, ए पर निहित है। और मान लेते हैं कि हम DFS एल्गोरिथम का उपयोग कर रहे हैं
A एक नया राज्य B उत्पन्न करेगा, B दो राज्य A & C उत्पन्न करेगा, क्योंकि पेड़ों में "मार्क नोड का दौरा नहीं किया गया है अगर यह पता लगाया जाता है" तो शायद DFS एल्गोरिथ्म फिर से A का पता लगाएगा, इस प्रकार एक नया राज्य B पैदा करता है, इस प्रकार हम एक अनंत लूप में मिल रहे हैं।
लेकिन क्या आपने कुछ देखा है, हम अप्रत्यक्ष किनारों पर काम कर रहे हैं यानी एबी और बीए के बीच संबंध है। बेशक यह एक चक्र नहीं है, क्योंकि चक्र का तात्पर्य है कि कोने> 3 होने चाहिए और सभी कोने पहले और अंतिम नोड्स को छोड़कर अलग-अलग हैं।
ST A-> B-> A-> B-> A यह एक चक्र नहीं है क्योंकि यह साइकिलिंग संपत्ति का उल्लंघन करता है> = 3. 3. लेकिन वास्तव में A-> B-> C-> A एक चक्र है> = 3 अलग-अलग नोड्स की जाँच की, पहला और अंतिम नोड समान जांचे गए हैं।
फिर से पेड़ के किनारों पर विचार करें, A-> B-> C-> B-> A, निश्चित रूप से इसका एक चक्र नहीं है, क्योंकि दो Bs हैं, जिसका अर्थ है कि सभी नोड अलग नहीं हैं।
अंत में आप एक ही नोड को दो बार एक्सप्लोर करने से रोकने के लिए ट्री-सर्च एल्गोरिथ्म को लागू कर सकते हैं। लेकिन उसके परिणाम हैं।
सरल शब्दों में, पेड़ में चक्र नहीं होते हैं और जहां ग्राफ़ हो सकता है। इसलिए जब हम खोज करते हैं, तो हमें ग्राफ़ में चक्रों से बचना चाहिए ताकि हम अनंत छोरों में न जाएं।
एक अन्य पहलू यह है कि पेड़ में आमतौर पर किसी प्रकार की टोपोलॉजिकल सॉर्टिंग या बाइनरी सर्च ट्री जैसी संपत्ति होती है जो ग्राफ़ की तुलना में खोज को बहुत तेज़ और आसान बनाती है।