Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
AaSD.docx
Скачиваний:
2
Добавлен:
06.02.2024
Размер:
823.97 Кб
Скачать
  1. Задачи решимости, задачи оптимизации

Определение: Задачи разрешимости – это задачи, зависящие от параметров и требующие от алгоритма дать один из ответов: «Да» или «Нет». Пример: «Делиться ли число X на Y без остатка?» как случай алгоритма деления в столбик.

Определение: Задачи оптимизации, с другой стороны, стремятся найти наилучшее (оптимальное) решение среди множества возможных вариантов. В отличие от задач разрешимости, задачи оптимизации не всегда имеют точное решение и могут требовать использования различных алгоритмов для нахождения, приближенного или оптимального решения.

Определение: Генератор – это функция (сопроцедура), которая запоминает, в каком месте и в каком состоянии был выполнен очередной возврат yield, и при следующем вызове возобновляет работу с прерванного места.

Метод полного перебора (brute force) является простым, но неэффективным подходом к решению задач, при которых нужно проверить все возможные варианты. Он заключается в том, чтобы перебрать все возможные комбинации или варианты и проверить каждый из них на соответствие условиям задачи. Например, для задачи нахождения наименьшего элемента в массиве метод полного перебора будет последовательно сравнивать каждый элемент с текущим минимальным и обновлять его, если найден меньший элемент. Принципам brute force соответствуют такие алгоритмы как Нарайаны, Хипа, Змейки (Штейнхауса-Джонсона-Троттера)

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

  1. Применение полного перебора для решения задачи коммивояжера. Перебор всех перестановок. Простой рекурсивный алгоритм

Определение: Задача коммивояжера (Traveling Salesman Problem, TSP) заключается в поиске оптимального пути для коммивояжера, который должен посетить заданный набор городов, пройдя через каждый город только один раз и вернувшись в исходный город. Цель – получить наикратчайший путь.

Определение: Перестановка - это упорядоченная последовательность элементов, где каждый элемент встречается ровно один раз. В контексте задачи коммивояжера, перестановка представляет собой порядок, в котором коммивояжер посещает города.

Алгоритмы перебора всех перестановок для 3 городов A, B, C:

1) Алгоритм Нарайаны (Narayana's algorithm): Этот алгоритм использует принцип следующей перестановки для генерации всех возможных перестановок. Он выполняет циклические перестановки элементов до тех пор, пока не будет сгенерирована каждая возможная перестановка.

1) ABC

2) ACB

3) BAC

4) BCA

5) CAB

6) CBA

2) Антилексикографический порядок: Этот алгоритм генерирует перестановки в обратном лексикографическом порядке, начиная с самой большой перестановки и последовательно переходя к меньшим.

1) CBA

2) CAB

3) BCA

4) BAC

5) ACB

6) ABC

3) Алгоритм Хипа (Heap's algorithm): Этот алгоритм использует рекурсивный подход для генерации всех перестановок. Он меняет местами элементы в массиве и вызывает себя рекурсивно для генерации всех перестановок с уменьшенным размером массива.

1) ABC

2) BAC

3) CAB

4) ACB

5) BCA

6) CBA

4) Алгоритм Штейнхауса-Джонсона-Троттера (Steinhaus-Johnson-Trotter algorithm): Этот алгоритм использует механизм "движения" элементов в различных направлениях для генерации перестановок. Он основан на понятии "мобильности" элементов и их направлении.

1) ABC

2) BAC

3) BCA

4) CAB

5) ACB

6) CBA

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