Алгоритмические стратегии
Примеры задач выбора
Алгоритмические стратегии
Исчерпывающий перебор (метод грубой силы)
Найти на конечном множестве X элемент x, удовлетворяющий совокупности условий K(x). Алгоритм: 1. Взять из множества X еще не рассмотренный элемент и проверить совокупность условие K(x). 2. Если какое-либо условие не выполнено, то перейти к п.1. 3. Если выполнены все условия, то x является решением. Если возможно несколько решений и требуется найти все их, то вернуться к п.1, пока не будут перебраны все элементы из множества X.
Пример 1. Поиск элемента в массиве.
Поиск элемента A в массиве A1, A2, …, An. В наихудшем случае (элемента в массиве нет или он находится на последнем месте) необходимо выполнить n сравнений T(n)=c*n, с – время одного сравнения. В среднем Tср(n) ~ c*n/2. В лучшем случае достаточно произвести только одно сравнение, когда элемент находится в начале массива.
Пример 2. Счастливые билетики.
Подсчитать число счастливых билетов, если номера билетов заданы к-значными десятичными числами. М – число вариантом, N – число счастливых билетов. k = 2, N = 10, M = 100 k = 4, N = 670, M = 10 000 k = 6, N = 55252, M = 1 000 000 k = 8, N = 4816030, N = 100 000 000 Получаем «комбинаторный взрыв»
Поиск с возвратом
Метод проб и ошибок
Пример. Задача о восьми ферзях. Восемь ферзей нужно расставить на шахматной доске так, чтобы ни один ферзь не угрожал другому. Если решать задачу методом прямого перебора, число вариантов оказывается непомерно большим. Если учесть, что на каждой горизонтали, на каждой вертикали и на каждой диагонали может находиться только один ферзь, число проверок можно существенно сократить. Всего имеется 92 различные расстановки, но только 12 из них являются независимыми, остальные можно получить поворотами и зеркальными отражениями доски.
«Жадные» алгоритмы
«Жадный» алгоритм делает на каждом шаге локально оптимальный выбор, - в надежде, что итоговое решение также окажется оптимальным. Пример. Задача о рюкзаке. Вор пробрался на склад, на котором хранятся n вещей. Вещь номер i стоит vi долларов и весит wi килограммов. Вор хочет украсть товара на максимальную сумму, причем максимальный вес, который он может унести в рюкзаке, равен W. Что он должен положить в рюкзак?
«Жадные» алгоритмы
Алгоритм: Сначала вор берет по максимуму самого дорогого товара; если весь этот товар кончился, а рюкзак не заполнен, вор берет следующий по цене товар, затем следующий и т.д. «Жадные» алгоритмы не всегда дают оптимальное решение.
«Жадные» алгоритмы
Пусть Вещь 1 весит 10 кг и стоит 60 $, 6 $/кг Вещь 2 весит 20 кг и стоит 100 $, 5 $/кг Вещь 3 весит 30 кг и стоит 120 $, 4 $/кг Вор может унести рюкзак весом 50 кг. «Жадный» алгоритм даст: Вещь 1 + Вещь 2 = 160 $ Это решение не оптимально, т.к. например: Вещь 1 + Вещь 3 = 180 $ Вещь 2 + Вещь 3 = 220 $ Если последовательность жадных выборов дает глобально оптимальное решение, то говорят, к задаче применим «принцип жадного выбора».
«Жадные» алгоритмы
Динамическое программирование
Подобно методу «разделяй и властвуй», динамическое программирование решает задачу, разбивая ее на подзадачи и объединяя их решения. Но динамическое программирование применимо тогда, когда подзадачи не являются независимыми. Пример. Список приглашенных. Вам поручили устроить веречинку на фирме, структура которой иерархична: отношение подчиненности задано деревом, корень которого – директор. У каждого сотрудника есть свой рейтинг. Директор распорядился, чтобы никто не оказался вместе со своим непосредственным начальником. Требуется составить список приглашенных с наибольшим суммарным рейтингом.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.