В чем смысл алгоритма IDA* vs a*
я не понимаю, как IDA* экономит пространство памяти.
Как я понимаю IDA* is A* с итеративным углублением.
в чем разница между объемом памяти A* использует vs IDA*.
не было бы последней итерации IDA* ведите себя точно так же, как A* и использовать тот же объем памяти. Когда я отслеживаю IDA* Я понимаю, что он также должен помнить приоритетную очередь узлов, которые находятся ниже f(n) порог.
я понимаю, что ID-глубина первого поиска помогает глубине первого поиска, позволяя ему сначала делать ширину, как поиск, не запоминая каждый узел. Но я подумал ... --2--> уже ведет себя как глубина сначала, поскольку в ней игнорируются некоторые под-деревья по пути. Как итеративное углубление заставляет его использовать меньше памяти?
еще один вопрос-глубина первого поиска с итеративным углублением позволяет найти кратчайший путь, заставляя его вести себя широту сначала нравится. Но!--2--> уже возвращает оптимальный кратчайший путь (учитывая, что эвристика допустима). Как итеративное углубление помогает ему. Я чувствую, что последняя итерация IDA * идентична A*.
1 ответов
на IDA* в отличие от A*, вам не нужно держать набор предварительных узлов, которые вы собираетесь посетить, поэтому ваше потребление памяти посвящено только локальным переменным рекурсивной функции.
хотя этот алгоритм ниже по потреблению памяти, у него есть свои недостатки:
в отличие от*, IDA* не использует динамическое программирование и поэтому часто заканчивает тем, что исследует одни и те же узлы много раз. (IDA * In Wiki)
эвристическая функция все еще должна быть указана для вашего случая, чтобы не сканировать весь график, но память сканирования, требуемая в каждый момент, - это только путь, который вы сканируете в настоящее время без окружающих узлов.
вот демонстрация памяти, необходимой в каждом алгоритме:
на A* алгоритм всех узлов и их окружающие узлы должны быть включены в список "необходимо посетить", а в IDA* вы получаете следующие узлы "лениво", когда достигаете своего узла предварительного просмотра, поэтому вам не нужно включать его в дополнительный набор.
как уже упоминалось в комментариях, IDA* Это просто IDDFS С эвристикой:

