Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
otvety_SAOD_5_shrift_1.doc
Скачиваний:
8
Добавлен:
23.09.2019
Размер:
2.1 Mб
Скачать

Разновидности метода решета

• решето Эратосфена

• Нерекурсивное модульное решето

• обобщенное модульное решето

• Рекурсивное решето

• Двойное решето

• Решето, отбраковывающее изоморфные объекты

68. Эвристические алгоритмы

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

• Не трудно изобрести эвристические алгоритмы, которые быстро находят решение; в действительности, можно обнаружить, что большинство, но не все решения, получаемые эвристикой, являются хорошими. • Теоретически невозможно доказать, что эвристический алгоритм всегда находит решение, близкое к оптимальному.

Эвристический подход для улучшения решения задачи о шахматном коне

• Для очередного хода выберем такое поле, в которое можно перейти из минимального числа полей. Так мы оставляем свободными поля, доступные из большего числа полей. Для этого дополнительно к матрице доски используем еще одну матрицу М такого же размера n*n, каждый элемент mi,j которой будет содержать число возможных переходов коня с поля hi,j на другие поля. Так же, как и в предыдущем примере, в элемент hi,j заносится номер хода коня,

одновременно соответствующий элемент mi,j обнуляется. Так как поле hi,j теперь стало

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

m. • Этот эвристический алгоритм с направленным выбором хода коня превращает

предыдущий алгоритм с возвратом, реализованный с применением рекурсии, в алгоритм без возврата и без рекурсии. Он выполняется всего за (m - 1) ходов (m - число полей на доске).

Характеристика жадных алгоритмов

• Жадные алгоритмы, как и динамическое программирование, применяются в тех случаях,

когда искомый объект строится по частям. Жадный алгоритм делает на каждом шаге «локально оптимальный» выбор.

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

Жадные алгоритмы для задачи о рюкзаке

Шаг 1. Вычислим удельные стоимости всех предметов множества ri= vi /wi , i = 1,2,..., n.

Шаг 2. Отсортируем предметы в невозрастающем порядке по их удельным стоимостям,

вычисленным на шаге 1 (неоднозначности разрешаются произвольным образом).

Шаг 3. До тех пор пока в отсортированном списке не останется ни одного предмета,

повторяем следующие действия: если текущий предмет помещается в рюкзак, мы

помещаем его туда; в противном случае переходим к следующему предмету.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]