- •1. Понятие сложности алгоритма. Верхняя, нижняя и средняя оценки сложности.
- •2 . Основные правила вычисления сложности алгоритма (сложность линейного алгоритма, ветвления, цикла). Примеры
- •3. Реккурентные соотношения с постоянными коэффициентами
- •4. Анализ сложности рекурсивных алгоритмов. Примеры.
- •9. Понятие полиномиальной сводимости. Класс npc. Примеры np-полных задач.
- •12. Задачи оптимизации и задачи принятия решения (распознавания). Задачи, np-полные в сильном и слабом смыслах. Примеры.
- •13. Приближенные алгоритмы для задачи об упаковке в контейнеры.
- •14. Приближенный алгоритм для евклидовой задачи коммивояжера.
- •15. Разрешимые и неразрешимые проблемы, невычислимые функции. Примеры.
- •17. Задача о максимальном паросочетании. Волновой алгоритм.
- •19. Задача о нахождении минимального расстояния между всеми парами вершин. Алгоритм Флойда.
- •20. Задача о максимальном потоке. Остаточная сеть. Аугментальный (увеличивающий) путь. Алгоритм Форда-Фалкерсона.
- •21. Задача о максимальном потоке минимальной стоимости (МаПМиС). Алгоритм решения.
- •22. Метод ветвей и границ. Решение задачи «о рюкзаке» методом ветвей и границ.
- •23. Метод ветвей и границ. Решение задачи коммивояжера.
20. Задача о максимальном потоке. Остаточная сеть. Аугментальный (увеличивающий) путь. Алгоритм Форда-Фалкерсона.
Задача о максимальном потоке.
Сеть – это ориентированный взвешанный граф G = (v,e) с положительными весами ребер с(е), в котором есть ровно одна вершина – источник (S) и ровно одна вершина – сток (T).
Вершины не равные S и Т называются внунтренними,
Вес ре6ра с(e) – пропускная способность ребра.
Потоком называется функция f, которая переводит множество ребер в множество действительных чисел.
Функция f удовлетворяет:
Для любого ребра e € E: 0<=f(e)<=c(e)
Для всех v€ V,v<>S,v=T:div+ (v) =div_(v), где
div+ - суммарный поток по всем ребрам е, таким что е=(u,v) div+(v) =,e=(u,v) – величина входящего потока
div_ - величина исходящего потока div_(v) =,
Свойство потока: div_(S)=div+(T)
Величина div_(S)=div+(T) называется величиной потока в сети.
Задача о максимальном потоке.
Найти поток, величина которого не меньше величины любого другого потока (найти поток с максимальной величиной)
Остаточная сеть.
Пусть дана сеть G и в ней запущен поток f, остаточная сеть – это взвешенный ориентированный граф с множеством вершин V и множеством дуг, определяющих:
если в сети G есть ребро (u,v) и величина потока по этому ребру меньше с(е), то в остаточной сети есть ребро e=(u,v) с весом с(е)-f(e) –прямые ребра
если в Gесть ребро е=(u,v) и поток через это ребро >0, то в остаточной сети есть реброe’=(u,v) с весомf(e) –встречные ребра
Аугментальный (увеличивающий) путь.
Если в остаточной сети существует ориентированный путь из S в T, то в исходной сети можно увеличить поток вдоль этого пути. При этом проход по прямым ребрам - увеличение потока в данном ребре исходной сети, а по встречному ребру – уменьшение потока.
Алгоритм Форда-Фалкерсона
Запустить 0-й поток f(e)=0
Построить остаточную сеть
Найти в остаточной сети ориентированный путь из S в T
Если путь найден, то увеличить поток вдоль этого пути и перейти к шагу 2. Иначе конец алгоритма. Текущий поток является максимальным.
21. Задача о максимальном потоке минимальной стоимости (МаПМиС). Алгоритм решения.
Пусть существует сеть и каждому ребру приписана стоимость S(e). Стоимость потока через ребро равна S(e)*f(e). Стоимость потока в сети – суммарная стоимость потока через все ребра
Задача о МаПМиС заключается в поиске такого max потока, стоимость которого не превышает стоимость любого другого max потока. (в дальнейшем рассматриваются только maxпотоки)
При построении остаточной сети будем отмечать не только пропускные способности ребер, но и их стоимость. Для прямых ребер стоимость равна стоимости исходного ребра. Для встречных: стоимость противоположна стоимости исходного ребра.
Алгоритм:
Построить максимальный поток
Построить остаточную сеть со стоимостями
Найти в остаточной сети ориентированный цикл с отрицательной стоимостью
Если цикл найден, то увеличивается вдоль него поток. Иначе конец. Текущий поток – МаПМиС
Определение транспортной сети.
22. Метод ветвей и границ. Решение задачи «о рюкзаке» методом ветвей и границ.
Пусть Q– задача минимизации
S– множество допустимых решений
φ(S) – качество решения
Задача: найти S* такое, чтоφ(S*) – минимальное.
Метод:
Разбиваем Sна подмножества. Для всех подмножеств строится оценкатакое, что. Если найденотакое, что, то все решения израссматривать не нужно.
Задача «о рюкзаке»
Дано:
nпредметов
Веса:
Стоимости:
Рюкзак вместимостью V
Ограничение: .
Найти:
Множество предметов M:
Задача является NP-полной.
1 способ:
Рассчитать ценность предметов
Упорядочить предметы по уменьшению ценности.
Ветвление (бинарное):
S1– 1-ый предмет берем
S2– 1-ый предмет не берем
Оценка:
иначе.
где M– множество предметов, которые уже взяли;
i+1 – номер очередного, еще не рассмотренного, предмета.
Выбираем вершину с максимальной оценкой, изменяем значение iи переходим к п.3
Пример:
4 предмета, V=5
Вершины графа пронумерованы сверху вниз слева направо
Ответ: набор {2;3}.
2 способ:
- попадают все случаи, когда минимальный набор предметов, сложенных в рюкзак, равенi. Наj-ом шаге ветвление аналогично, но рассматриваем не минимальный номер, аj-ый по величине.
Вершины графа пронумерованы сверху вниз слева направо
Ответ: {2,3}