
СОДЕРЖАНИЕ
ВВЕДЕНИЕ 3
1 ЗАДАЧА О МАКСИМАЛЬНОМ ПОТОКЕ 4
1.1 Постановка потоковых задач 4
1.2 История развития алгоритмов решение задачи о максимальном потоке 7
2 ТЕОРЕМА ФОРДА - ФАЛКЕРСОНА 12
3 АЛГОРИТМ ФОРДА - ФАЛКЕРСОНА 17
ЗАКЛЮЧЕНИЕ 21
СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ 22
ВВЕДЕНИЕ
Задачи теории потоков в сетях являются одними из основных в исследовании операций, computer science и инженерном деле. Теория потоков имеет многочисленные приложения в реально возникающих задачах.
Теория потоков в сетях развилась и развивается сегодня в лучших традициях прикладной математики: она родилась среди разнообразных прикладных проблем и продолжает вносить практический вклад в решение многих прикладных задач. Эта теория установила под собой сильную методологическую основу и сформулировала многочисленные стимулирующие вычислительные проблемы. Кроме того, исследования в области теории потоков сильно связаны с исследованиями в дискретной математике и оптимизации, которые не имеют определенной связи с сетями. Например, разработка методов разложения целых чисел, теория матройдов, и множества задач связанных с двойственностью.
К теории потоков относятся различные задачи, которые можно классифицировать следующим образом. Задачи транспортного типа – транспортная задача, поиск пути минимальной длины, поиск циклов отрицательного веса (неоптимальных перевозок) и т. д. Задачи определения существования потока – задача о максимальном потоке и, двойственная к ней, задача поиска минимального разреза. А также задача о поиске обобщенного потока – потока с потерями и приобретениями.
В этой работе рассматриваются элементы исторического развития задач, связанных с поиском максимального потока: историю появление новых методов, структур данных, приемов, связанных с необходимостью находить все более эффективные или все более обобщенные алгоритмы для решения все больше возникающих прикладных задач, так или иначе приводимых к задаче поиска максимального потока в сети.
1 Задача о максимальном потоке
1.1 Постановки потоковых задач
Здесь приводится классические и наиболее часто используемые варианты постановки задач теории потоков. Начнем с общей задачи теории потоков.
Пусть G=(V,E) – ориентированный граф, в котором V – множество вершин и E – множество дуг. На множестве дуг графа заданы две функции: c(i,j) – цена дуги (i,j) и u(i,j) – пропускная способность дуги (i,j). Предположим, что паре вершин однозначно соответствует дуга, если она есть. Для каждой вершины iV определим величину bi – потребность в обеспечении. Эта величина показывает, сколько вещества требуется данному стратегическому пункту или сколько вещества в этом пункте в избытке. Если bi0, то пункт i называется пунктом производства (вещество в избытке), если bi0, то пункт i называется пунктом потребления (вещество в недостатке). Если же bi=0, то речь идет о транзитном пункте. С этими обозначениями общая задача теории потоков (она же задача поиска потока минимальной стоимости в общем виде, она же – транспортная задача) запишется следующим образом:
Вектор x=(xij) называется потоком в сети G. Первое ограничение задачи (уравнения баланса) показывает, что поток, проходящий через вершину, должен оставлять (или забирать) ровно необходимое ей количество вещества. Последнее ограничение запрещает превышение пропускной способности дуг сети. Речь идет о поиске оптимального (в смысле транспортных затрат) способа доставки товара (вещества) из пунктов потребления в пункты производства. Задача не имеет решения, если не выполнено условие баланса
однако замкнуть (сбалансировать) задачу можно путем добавления фиктивной вершины, которая будет иметь потенциал, равный
Особую роль в теории потоков и в истории ее развития имеют следующие частные случаи модели.
Пусть имеются две особые вершины s,tV. Пусть Cjj означает длину дороги из пункта i в пункт j. Требуется найти кратчайший путь из s в t. Для решения задачи о поиске кратчайшего пути, положим в общей модели bs=1 и bt=-1, а для остальных вершин iV/s.t положим bi=0. Выберем uij=1 для всех дуг сети. Решением задачи поиска потока в этом случае будет является кратчайший путь из пункта s в пункт t.
Пусть мы имеем, как и в предыдущем случае две особых вершины: s, которую будем называть истоком, и t, называемую стоком. И мы хотим определить максимальное количество вещества, которое можно перемещать из истока в сток, не превышая пропускных способностей дуг сети и с тем условием, что при перемещении вещество не может накапливаться в вершинах. Для решения этой задачи положим bi=0 для всех, iV,cij=0 для всех (i,j)E и введем дополнительную дугу (t,s), для которой положим cis=-1 и uis=. Такая задача называется задачей поиска максимального потока в сети. Речь идет о том, чтобы найти способ перемещать в единицу времени как можно больше вещества из истока в сток (то же самое, что максимизировать поток, идущий обратно по дуге из t в s).
В 1956 году классическая задача поиска максимального потока была поставлена Фордом и Фалкерсоном и записана уже не в терминах задачи линейного программирования, а в терминах новой теории – теории потоков. Ими же отдельно сформулирована задача поиска максимального потока и предложен первый алгоритм ее решения, не имеющий ничего общего с симплексным методом, которым подобная задача, поставленная в терминах задачи линейного программирования решалась Данцигом.
Кроме задачи поиска максимального потока, рассматривается задача поиска потока минимальной стоимости так же имеющая свои особенности, которые выходят за пределы нашей работы.
Эти задачи – о кратчайшем пути, о максимальном потоке, о потоке минимальной стоимости (транспортная задача) – получили широкое применение в различных областях человеческой деятельности и каждая из них развивалась своим путем. Было разработано множество алгоритмов, которые находят решения потоковых задач в их частных случаях, и каждый новый алгоритм нес в себе идею, которая могла быть применена к каждой вариации общей задачи теории потоков в том или ином виде. Было разработано множество структур данных, которые обобщались и на многие другие задачи и прикладной математики.