- •Формальное описание алгоритма 1 задачи “Ближайшая пара”
- •Лекция 2 Задача о битоническом пути
- •Битонический путь
- •Лекция 3 Динамическое программирование и оптимизационная задача перемножения матриц.
- •2. Алгоритмизация описанного процесса на основе (2) и (3).
- •Лекция 4 Оптимальная триангуляция треугольника.
- •Лекция 5
- •Циркуляция.
- •Лекция 6 Многополюсные максимальные потоки
- •Алгоритм гомори—ху
- •Лекция 7 Задача распределения капитала
- •1. Случай запрета коротких позиций.
- •2. Случай разрешения коротких позиций.
- •Случай наличия безрискового актива.
- •Лекция 8 Потоковые алгоритмы.
- •Лекция 9. Алгоритм Гомори.
- •Лекция 10 Многополюсные минимальные потоки.
- •Лекция 11 доминирующие множества и абсолютный центр.
- •Доминирующие множества.
- •Нахождение абсолютного p-центра
- •Ленкция 12 простой (классический) генетический алгоритм.
- •Лекция 13 Стохастическая задача размещения-распределения объектов.
Лекция 9. Алгоритм Гомори.
Утверждение1:
Пусть G– неор. Граф и c
– весовая функция для того чтобы остов
T*
был максимальным необходимо и достаточно,
чтобы для любого
ребра выполнялось неравенство
,
где
–некоторая
простая цепь остова T*.
Для случая минимального остова –
неравенство противоположное.
Определение:
-потоковая
функция. И будем говорить, что симметричная
неотрицательная функция
реализуема в качестве потоковой, если
существует неор. граф G
для которого она является потоковой(т.е.
ее значение = величине максимального
потока)
Утверждение2:
Если
– потоковая функция некоторого графа
G,
то для любых трех вершин
выполняется неравенство:
Замечание:
Из неравенства (2) следует, что из 3-х
чисел
–
два должны быть равны и 3-е ”
”
Замечание:
Для любого набора
выполняется: (3)
Утверждение3:
Если неотрицательная симметричная
функция удовлетворяет неравенству (2)
для любых
,
то существует неориентированная сеть,
имеющая в качестве потоковой функции
функцию
.
Теорема: Для того, чтобы неотрицательная симметричная функция реализовывалась в качестве потоковой необходимо и достаточно, чтобы она удовлетворяла условию (2). Если функция реализуема, то она реализуема всегда деревом (показали в утверждении 3).
Определение: Два графа называются потоково эквивалентными, если они имеют одну и туже потоковую функцию.
Алгоритм:
Правила решения:
В
начале
X –один узел будущего дерева, выбираем
в узле 2 вершины s,t
и решаем задачу о максимальном потоке
Пусть величина потока , тогда разбиваем X: v
После этого выбираем один из узлов дерева, образованный множеством вершин, пусть это Y1
В
ыберем
в нем новые две вершины s,t
строим w–сжатый
граф, склеив все вершины Y2
в w.
Затем решаем задачу о максимальном
потоке и находим минимальный разрез
и
–величина
максимального потока.
А)
Если
,
то v1
v
Б)
Если
,
то v1
v
Пример:
Найти потоковую функцию этого графа:
1. s=1, t=2
(в скобках указана пропускная способность дуги, а вне скобок итоговый поток по этой дуге, после применения алгоритма Ф-Ф)
(во
множество
попадают вершины помеченные на последнем
шаге алгоритма Ф-Ф, во множество
попадают все остальные вершины)
2. s=1, t=3
3. s=3, t=4
Решив этот пример до конца получим потоковую функцию для исходного графа.
Лекция 10 Многополюсные минимальные потоки.
Для формального описания алгоритма будем использовать следующие договорённости:
1. Дерево будем представлять списком рёбер и пропускных способностей.
Возникает вопрос – как нумеровать вершины. Если узел соответствует одноэлементному подмножеству, то этот узел будем нумеровать номером этой вершины. Если же узлу соответствует подмножество мощности |X|>1, то он будет иметь номер больший, чем n. (Для этого нужен специальный счётчик узлов. Если очередной узел делится на два, то с одной стороны счётчик увеличивается на +1, а с другой на +2). Необходимо описать процедуру, которая для любого подмножества определяет его номер.
Каждый раз, когда в результате деления того или иного узла появляются узлы мощности, большей 1, мы будем помещать их в стек, предварительно присвоив узлу порядковый номер.
2. Также, возникает вопрос, как задавать w-сжатый вспомогательный граф.
Зададим
граф с помощью матрицы
Далее применим алгоритм Форда-Фалкерсона.
Пусть
в результате применения алгоритма на
матрицу
получаются помеченные и непомеченные
вершины: Y1
– помеченные, Y2
– непомеченные.
Правила преобразования дерева:
1.
В списке рёбер дерева проводятся преобразования:
После
этого добавляем ребро
добавляем в список рёбер очередную
запись. (где
).
2.
В списке рёбер дерева проводятся преобразования:
После этого добавляем ребро добавляем в список рёбер очередную запись. (где ).
Обоснование.
Покажем, что построенное по указанной схеме дерево эквивалентно первоначальной сети.
Пусть
T
– дерево, построенное алгоритмом,
- пропускная способность вершин.
T = (X, UT)
согласно
алгоритму.
Построим потоковую функцию этого дерева:
,
при условии, что
единственная цепь, соединяющая i и j.
Это следует из того, что для любых двух вершин, соединённых в дереве одной цепью, минимальный разрез – это разрез, состоящий из одного ребра этой цепи минимальной пропускной способности.
(1)
Для любых трёх вершин I, j, k справедливо неравенство:
где выделенное ребро – ребро с минимальной пропускной способностью.
Тогда v(k,j) также определяется этим числом.
Докажем эквивалентность, т.е. выполнение (1) для любой пары вершин.
Докажем два противоположных неравенства. Рассмотрим произвольные два ребра, и цепь, соединяющую их.
Любое ребро этой цепи соответствует разрезу в графе G, отделяющему i от j.
А так как величина максимального потока равна величине пропускной способности минимального разреза, то
Докажем противоположное неравенство.
Докажем, что на любой итерации алгоритма любые два узла, соединённые в дереве ребром с пропускной способностью v таковы, что существуют в этих узлах вершины, величина максимального потока между которыми в исходном графе v[i,j] = v.
Докажем методом математической индукции.
На первом шаге будет построено дерево
v(s,t) = v.
На первой итерации утверждение верно.
Индуктивное утверждение:
Пусть после любой итерации с номером, меньшим k, выполняется указанное свойство.
Рассмотрим k-тую итерацию.
Рассмотрим любое ребро, на начало итерации соединяющее X1 и X’.
iεX’ j
Т.к. это начало итерации, то v(i,j) = v.
Пусть подвергается разбиению узел X1, т.е. в этом узле выбираются две вершины: s и t.
Все остальные вершины склеиваются.
v v’
i s t
j может попасть в X’1 или X’2.
Если
,
то пара (i, j)
и остается той парой, для которой v(i,j)
= v.
.
Покажем, что нужной парой вершин является
(i, s).
Если существует сжатие, то величина максимального потока между i и s сохранится. Заменим все пропускные способности между вершинами S’2 в исходной сети на бесконечность. Получим новую сеть.
Построим
в новой сети максимальный поток из i
в s. Обозначим его через
.
.
Посчитаем величины:
Воспользуемся тем, что потоковая функция.
Следовательно,
,
т.к. имеет два смысла – величина
максимального потока и минимального
разреза.
Таким
образом, получили неравенство
Из двух противоположных неравенств получили равенство, и (1) доказано.
