14-06-2024
Двунаправленный поиск пути[1][2] в ширину (или глубину) — усложнённый алгоритм поиска в ширину (или глубину), идея которого заключается в формировании процесса поиска от начальной (прямой поиск) и от конечной вершины (обратный поиск) графа.
Содержание |
Нахождение искомого пути сводится к определению путей от начальной к какой-то промежуточной, а от неё к конечной вершине. Реализуется проверкой в одном или обоих процессах, когда лист одного дерева поиска совпадёт с листом другого, после чего выделяются пути до этого элемента. Соединив пути получаем искомый путь. Если два поиска осуществляются параллельно — это ещё больше экономит время, на получение искомого пути, по сравнению с однонаправленным поиском.
Сложность всего алгоритма оценивается как сумма сложности прямого и обратных поисков, проверки принадлежности, равной одной операции, постоянному времени (O(n)), обращению к хэш-таблице.
Слишком зависит от конкретной ситуации, если поиск осуществляется не по n-арному дереву.
Двунаправленный поиск, при заданных единственных начального и конечного элементах, может улучшить однонаправленный поиск в ширину, обычно, в 2 раза. Наиболее сложным случаем для двунаправленного поиска является такая задача, в котором для проверки цели дано только неявное описание некоторого (возможно очень большого) множества целевых состояний, например всех состояний, соответствующих проверки цели "Мат" в шахматах. При обратном поиске потребовалось бы создать компактные описания всех состояний, которые позволяют поставить мат с помощью ходов и т.д. ; и эти описания нужно было бы сверять с состояниями, формируемыми при прямом поиске. Общего способа эффективного решения такой проблемы не существует.
Алгоритм состоит:
Сложность реализации заключается в алгоритме обратного поиска.
Это заготовка статьи по информатике. Вы можете помочь проекту, исправив и дополнив её. |
Двунаправленный поиск яндекс, двунаправленный поиск запчастей, двунаправленный поиск в глубину, двунаправленный поиск граф.
22 Тельца, 2007 год в Канаде, Петухов, Александр, P — n-переход, Лейпцигское сражение 1813.