- •Временная сложность алгоритмов
- •Задачи решимости, задачи оптимизации
- •Применение полного перебора для решения задачи коммивояжера. Перебор всех перестановок. Простой рекурсивный алгоритм
- •Применение полного перебора для решения задачи о рюкзаке. Перебор всех подмножеств множества. Сведение к перебору двоичных векторов. Коды Грея.
- •Общая схема метода ветвей и границ. Применение метода ветвей и границ для решения задачи о рюкзаке
- •Динамическое программирование
- •Жадные алгоритмы. Задача о выборе заявок. Свойства задач, для которых применимы жадные алгоритмы.
- •Эвристические методы решения задач. Эвристика жадного выбора и локального поиска. Примеры. Задача о покрытии, задача о камнях. Метаэвристики
- •Абстрактные типы данных. Атд стек, очередь, корневое дерево, множество, словарь, очередь с приоритетом, система непересекающихся множеств, граф и способы их реализации
- •Обходы графа. Поиск в глубину, поиск в ширину
Жадные алгоритмы. Задача о выборе заявок. Свойства задач, для которых применимы жадные алгоритмы.
Определение: Жадные алгоритмы (Greedy algorithms) - это алгоритмический подход, при котором на каждом шаге выбирается локально оптимальное решение в надежде, что это приведет к глобально оптимальному решению. Жадные алгоритмы принимают решения на основе текущего состояния, без пересмотра принятых решений в будущем.
Задача о выборе заявок (Task Scheduling Problem):Пусть даны n заявок на проведение занятий в одной и той же аудитории. Два различных занятия не могут перекрываться по времени. В каждой заявке указаны начало и конец занятия. Разные заявки могут пересекаться, и тогда можно удовлетворить только одну из них. Необходимо набрать максимальное количество совместимых друг с другом заявок.
Пример алгоритма решения задачи о выборе заявок с использованием жадного подхода:
1. Сортируем все заявки по времени окончания по возрастанию.
2. Инициализируем пустое множество выбранных заявок.
3. Для каждой заявки в отсортированном списке:
- Если текущая заявка не пересекается с ранее выбранными заявками, добавляем ее в множество выбранных заявок.
4. Возвращаем множество выбранных заявок.
Свойства задач, для которых применимы жадные алгоритмы:
- Жадный выбор локально оптимальных решений должен привести к глобально оптимальному решению.
- Задача должна иметь определенную структуру, в которой локально оптимальное решение можно объединить, чтобы получить глобально оптимальное решение.
Однако, не все задачи могут быть решены с помощью жадных алгоритмов, и иногда жадный выбор может привести к неправильному или неоптимальному решению. Поэтому важно тщательно анализировать свойства задачи и проверять применимость жадного подхода перед его использованием.
Эвристические методы решения задач. Эвристика жадного выбора и локального поиска. Примеры. Задача о покрытии, задача о камнях. Метаэвристики
Определение: Эвристические методы решения задач - это приближенные алгоритмы, которые позволяют находить решения задач с достаточно высокой эффективностью, но без гарантии оптимальности. Эвристики основаны на использовании опыта, эмпирических наблюдений и простых правил, чтобы принимать быстрые решения.
1. Эвристика жадного выбора: Эта эвристика основана на принципе выбора локально оптимального решения на каждом шаге в надежде достичь глобально оптимального решения. Примеры:
- Задача о покрытии (Set Cover Problem): Формулировка: Задано конечное множество X и семейство F его подмножеств. Каждый элемент X принадлежит хотя бы одному из подмножеств семейства F. Требуется найти минимальное число подмножеств из F, которые все вместе покрывают множество X. Матмодель: найти покрытие , для которого X = , где
- Задача о камнях: Формулировка: Имеется n камней с весами . Необходимо разложить их на m куч так, чтобы вес самой тяжёлый кучи был минимальным. Предлагаемый алгоритм: На каждом шаге будем брать самый тяжёлый камень из оставшихся и класть его в самую лёгкую кучу.
2. Локальный поиск: Этот метод начинает с некоторого начального решения и осуществляет локальные изменения в надежде на улучшение решения. Примеры:
- Задача о покрытии: Эвристика локального поиска может использоваться для улучшения решения, выбирая лучшие подмножества и осуществляя локальные изменения для устранения ненужных элементов.
Определение: Метаэвристики - это общие методы для решения сложных оптимизационных задач, которые позволяют эффективно искать решения в больших пространствах поиска. Они обычно комбинируют различные эвристические подходы. Примеры метаэвристик включают генетические алгоритмы, муравьиные алгоритмы, отжиг и рой частиц.
Важно отметить, что эвристические методы и метаэвристики обеспечивают приближенные решения, которые могут быть неоптимальными, но в то же время позволяют решать задачи с большими объемами данных и высокой сложностью, для которых полный перебор или оптимальные алгоритмы неэффективны.