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