Поиск с возвратом — это рекурсивный метод, использующий грубую силу для постепенного поиска и построения наилучшего или желаемого решения.
Если частичное решение не удается, выполняется возврат к предыдущему частичному решению и повторная попытка с новым решением.
Одним из известных примеров является «лучший маршрут полета», учитывая список рейсов и отправную точку, постройте маршрут. Если существует несколько маршрутов, укажите первый в алфавитном порядке.
Давайте углубимся в код:
Давайте вызовем вспомогательный метод, но сначала мы определим лучший маршрут и текущие переменные маршрута.
Во-первых, мы проверяем, не пуст ли список рейсов и есть ли соединение (в противном случае мы мало что можем сделать).
Затем для каждого рейса в списке рейсов, если место отправления не совпадает с местом стыковки, это будет неудачный маршрут; нам нужно вернуться, и это частичное решение не работает.
Для текущего рейса, соответствующего месту отправления, есть два варианта; есть еще рейсы для проверки, затем мы добавляем пункт назначения рейса к текущему маршруту и рекурсивно вызываем список рейсов, но удаляем текущий рейс.
Если это был последний рейс в списке, нам нужно сравнить лучший маршрут; если лучшего маршрута нет, то выбираем текущий маршрут как лучший маршрут; в противном случае мы выбираем кратчайший маршрут между существующим лучшим маршрутом и текущим маршрутом.
Давайте используем следующее расширение, чтобы определить меньший маршрут.
Вот пример использования этой функции:
Поскольку метод поиска с возвратом использует подход грубой силы, вам может потребоваться попробовать все возможные комбинации; это неэффективный алгоритм.В худшем случае, в зависимости от требований алгоритма, это может привести к O(n!), O(2^n) или даже O(n^n) для пространства и временная сложность.
‹‹ Два указателя против скользящего окна | Книга | Вскоре…