В чем смысл алгоритма 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)

эвристическая функция все еще должна быть указана для вашего случая, чтобы не сканировать весь график, но память сканирования, требуемая в каждый момент, - это только путь, который вы сканируете в настоящее время без окружающих узлов.

вот демонстрация памяти, необходимой в каждом алгоритме:

Memory Map

на A* алгоритм всех узлов и их окружающие узлы должны быть включены в список "необходимо посетить", а в IDA* вы получаете следующие узлы "лениво", когда достигаете своего узла предварительного просмотра, поэтому вам не нужно включать его в дополнительный набор.

как уже упоминалось в комментариях, IDA* Это просто IDDFS С эвристикой:

IDDFS vs IDA*