В чем смысл алгоритма 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
С эвристикой: