2015-10-08 13 views
8

का बिंदु क्या है मुझे समझ में नहीं आता कि IDA* मेमोरी स्पेस कैसे बचाता है। मैं कैसे समझता हूं IDA*A* पुनरावृत्ति गहराई के साथ है।आईडीए * बनाम ए * एल्गोरिदम

A* मेमोरी की मात्रा के बीच क्या अंतर है IDA* बनाम उपयोग करता है।

IDA* का अंतिम पुनरावृत्ति A* जैसा व्यवहार नहीं करेगा और उसी मात्रा में स्मृति का उपयोग करें। जब मैं IDA* का पता लगाता हूं तो मुझे एहसास होता है कि इसे f(n) थ्रेसहोल्ड से नीचे नोड्स की प्राथमिकता कतार याद रखना होगा।

मैं समझता हूं कि आईडी-गहराई पहली खोज गहराई से पहले खोज की तरह मदद करती है, जबकि प्रत्येक नोड को याद रखने के दौरान इसे खोज की तरह पहली बार चौड़ाई करने की अनुमति मिलती है। लेकिन मैंने सोचा कि A* पहले से ही गहराई की तरह व्यवहार करता है क्योंकि इसमें कुछ उप-पेड़ों को नजरअंदाज कर दिया जाता है। Iteratively गहराई से यह कैसे कम स्मृति का उपयोग करता है?

एक और सवाल यह है कि गहराई से पुनरावृत्ति गहराई के साथ पहली खोज आपको सबसे पहले पथ की तरह बनाकर सबसे कम पथ खोजने की अनुमति देती है। लेकिन A* पहले से ही सबसे छोटा रास्ता देता है (दिया गया है कि हेरिस्टिक स्वीकार्य है)। पुनरावृत्ति गहराई कैसे मदद करता है। मुझे लगता है कि आईडीए * का अंतिम पुनरावृत्ति A* के समान है।

उत्तर

7

IDA* में A* के विपरीत, आपको टेटेटिव नोड्स का एक सेट रखने की आवश्यकता नहीं है, जिसे आप यात्रा करना चाहते हैं, इसलिए, आपकी स्मृति खपत केवल रिकर्सिव फ़ंक्शन के स्थानीय चर के लिए समर्पित है।

हालांकि इस एल्गोरिथ्म स्मृति की खपत पर कम है, यह अपने आप ही खामियां हैं:

ए * के विपरीत, आईडीए * गतिशील प्रोग्रामिंग का उपयोग नहीं है और इसलिए अक्सर एक ही नोड्स कई बार की खोज समाप्त होता है। (IDA* In Wiki)

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

Memory Map

A* एल्गोरिथ्म में नोड्स और उनके आसपास के नोड्स के सभी के लिए "जरूरत में शामिल किया जाना चाहिए:

यहाँ स्मृति प्रत्येक एल्गोरिथ्म में आवश्यक का एक डेमो है IDA* में "सूची" पर जाएं, जब आप अपने पूर्वावलोकन नोड तक पहुंचते हैं तो आपको अगले नोड्स "आलसी" मिलते हैं ताकि आपको इसे अतिरिक्त सेट में शामिल करने की आवश्यकता न हो।

टिप्पणी में उल्लेख किया है, IDA* is basically just IDDFS with heuristics:

IDDFS vs IDA*

+1

लेकिन नहीं आईडीए * अभी भी नोड्स यह यात्रा करने के लिए के बाद से यह अभी भी backtracks का इरादा रखता है स्टोर करने के लिए की जरूरत है, और जब उलटे पांव लौटने से, इसे खोजने के लिए करना चाहता है अगले नीचे जाने के लिए सबसे अच्छा रास्ता। ए * को नोड्स स्टोर करने की जरूरत है, आईडीए * ए * जैसा नहीं है लेकिन आप एक निश्चित एफ (एन) के बाद रुकते हैं और फिर से शुरू करते हैं? क्या आप कह रहे हैं कि आईडीए * हेरिस्टिक के अलावा आईडीडीएफएस है।जैसा कि सीमा के नीचे के सभी नोडों में समान रूप से व्यवहार किया जाता है और नोड के बच्चों का दौरा करना विशेष रूप से तब तक नहीं होता जब तक कि सभी बच्चों का एफ (एन) सीमा से नीचे न हो? – tcui222

+0

प्रत्येक नोड 'आईडीए *' विज़िट में पहले से ही अपने पड़ोसी नोड्स का संदर्भ होता है, इसलिए जब आपके पास अपने कॉल स्टैक (उपरोक्त चित्र में पीला) में यह नोड होता है, तो आप उन्हें पुन: सक्रिय कर सकते हैं। –

+0

मेरे संपादन को दोबारा पढ़ें। –

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