Алгоритм отмены цикла минимального среднего веса — различия между версиями
Penguinni (обсуждение | вклад) (→Корректность) |
Penguinni (обсуждение | вклад) (→Корректность) |
||
| Строка 72: | Строка 72: | ||
{{Лемма | {{Лемма | ||
|id=lemma5 | |id=lemma5 | ||
| − | |statement=Последовательность из <tex>m</tex> отмен циклов минимального среднего веса уменьшает <tex>\varepsilon(f)</tex> в не более чем <tex>1-\dfrac{1}{n}</tex> раз. | + | |statement=Последовательность из <tex>m</tex> отмен циклов минимального среднего веса уменьшает <tex>\varepsilon(f)</tex> в не более чем <tex>\left(1-\dfrac{1}{n}\right)^{m}</tex> раз. |
|proof= | |proof= | ||
:Рассмотрим последовательность <tex>m</tex> отмен циклов минимального среднего веса. Изначально любое ребро <tex>uv</tex> удовлетворяет свойству <tex>p_{\varphi}(uv) \leqslant -\varepsilon</tex>. Отмена цикла добавляет в остаточную сеть <tex>G_{f}</tex> только ребра положительной приведенной стоимости (см. [[#lemma4|предыдущую лемму]]) и удаляет из сети <tex>G</tex> как минимум одно ребро. Рассмотрим два случая: | :Рассмотрим последовательность <tex>m</tex> отмен циклов минимального среднего веса. Изначально любое ребро <tex>uv</tex> удовлетворяет свойству <tex>p_{\varphi}(uv) \leqslant -\varepsilon</tex>. Отмена цикла добавляет в остаточную сеть <tex>G_{f}</tex> только ребра положительной приведенной стоимости (см. [[#lemma4|предыдущую лемму]]) и удаляет из сети <tex>G</tex> как минимум одно ребро. Рассмотрим два случая: | ||
#Ни один из отмененных циклов не содержал ребер, обладающих неотрицательной приведенной стоимостью. Тогда каждая отмена цикла уменьшает размер допустимого графа <tex>E</tex> и после <tex>m</tex> отмен граф <tex>E</tex> пуст, что означает, что <tex>f</tex> {{---}} оптимальный поток, то есть <tex>\varepsilon(f)=0</tex>. | #Ни один из отмененных циклов не содержал ребер, обладающих неотрицательной приведенной стоимостью. Тогда каждая отмена цикла уменьшает размер допустимого графа <tex>E</tex> и после <tex>m</tex> отмен граф <tex>E</tex> пуст, что означает, что <tex>f</tex> {{---}} оптимальный поток, то есть <tex>\varepsilon(f)=0</tex>. | ||
| − | #Некоторые из отмененных циклов содержат ребра неотрицательной приведенной стоимости. Пусть <tex>C</tex> {{---}} первый из таких циклов. Каждое ребро в <tex>C</tex> обладает приведенной стоимостью как минимум <tex>-\varepsilon</tex>, хотя бы одно из ребер <tex>C</tex> обладает неотрицательной приведенной стоимостью, количество ребер в <tex>C</tex> не превышает <tex>V</tex>. Тогда средний вес цикла <tex>C | + | #Некоторые из отмененных циклов содержат ребра неотрицательной приведенной стоимости. Пусть <tex>C</tex> {{---}} первый из таких циклов. Каждое ребро в <tex>C</tex> обладает приведенной стоимостью как минимум <tex>-\varepsilon</tex>, хотя бы одно из ребер <tex>C</tex> обладает неотрицательной приведенной стоимостью, количество ребер в <tex>C</tex> не превышает <tex>V</tex>. Тогда средний вес цикла <tex>\mu(C) \geqslant -\left(1-\dfrac{1}{n}\right)\varepsilon</tex>. Тогда непосредственно перед отменой <tex>C</tex>, <tex>\varepsilon(f) \leqslant \left(1-\dfrac{1}{n}\right)\varepsilon</tex> (по [[#lemma3|лемме]]). Поскольку мы [[#lemma4|знаем]], что <tex>\varepsilon(f)</tex> не увеличивается, доказываемое утверждение верно.}} |
{{Лемма | {{Лемма | ||
Версия 14:55, 5 января 2017
В статье описывается один из сильно полиномиальных алгоритмов решения задачи о поиске потока минимальной стоимости.
Содержание
Алгоритм
Приведенный алгоритм основан на идее алгоритма Клейна отмены цикла отрицательного веса. Выбор цикла минимального среднего веса вместо случайного делает алгоритм сильно полиномиальным.
| Определение: |
| Сильно полиномиальными (англ. strongly polynomial) в контексте данной задачи называются алгоритмы, чья сложность полиномиально зависит от и . |
Описание
Обозначим как остаточную пропускную способность цикла при протекании в сети потока . Cтоимость цикла обозначим за , а длину (число входящих в него ребер) — за .
| Определение: |
| Средним весом (англ. mean weight) цикла будем называть отношение его стоимости к его длине |
- Шаг 1. Рассмотрим некоторый поток .
- Шаг 2. Найдем цикл , обладающий наименьшим средним весом. Если , то — поток минимальной стоимости и алгоритм завершается.
- Шаг 3. Отменим цикл , пустив по нему максимально возможный поток: . Перейдем к шагу 1.
Сложность
, при этом времени тратится на поиск цикла минимального среднего веса.
Корректность
Пусть — поток минимальной стоимости. Введем на нашей сети функцию потенциалов .
| Определение: |
| Приведенной стоимостью (англ. reduced cost) ребра назовем следующую величину: . |
Иными словами, приведенная стоимость — это сколько нужно потратить денег, чтобы перевезти единицу жидкости из в . (Ее нужно купить в , перевезти из в и продать в .)
| Лемма: |
Если — поток минимальной стоимости, то такое, что . |
| Доказательство: |
|
| Определение: |
| Будем говорить, что поток — -оптимальный (англ. -optimal), если такая, что . |
| Лемма: |
Если стоимости целочисленны и поток — -оптимальный, где , то — поток минимальной стоимости. |
| Доказательство: |
|
Обозначим за минимальную величину среди средних весов циклов для потока , а за минимальное такое, что поток — -оптимальный.
| Лемма: |
Если — поток не минимальной стоимости, то . |
| Доказательство: |
|
| Лемма: |
Отмена цикла минимального среднего веса не увеличивает . |
| Доказательство: |
|
| Определение: |
| Допустимым графом (англ. admissible graph) будем называть такой подграф остаточной сети, что он включает только ребра отрицательной приведенной стоимости. |
| Лемма: |
Последовательность из отмен циклов минимального среднего веса уменьшает в не более чем раз. |
| Доказательство: |
|
| Лемма (доказательство оценки времени работы алгоритма): |
Пусть . Разобьем работу алгоритма на группы по последовательных итераций. Утверждается, что каждая группа фиксирует поток на независимом ребре , то есть итерации из другой группы не меняют величину . |
| Доказательство: |
| Оценка следует непосредственно из этого утверждения. Чтобы доказать его, рассмотрим некоторую группу итераций. Пусть — поток до первой итерации рассматриваемой группы, а — поток после последней итерации. Также пусть для простоты обозначений , , при этом — функция потенциалов такая, что удовлетворяет свойству -оптимальности. Рассмотрим цикл , отмененный после первой итерации группы. Выбор дает нам . Поскольку средний вес цикла равен , некоторое ребро цикла должно иметь приведенную стоимость . Таким образом, поток на ребре не изменится при итерациях, происходящих после этой группы. Таким образом, каждая группа фиксирует поток на независимом ребре. |
Алгоритм поиска цикла минимального среднего веса
Наивный способ
Устроим двоичный поиск. Установим нижнюю и верхнюю границы величины среднего веса цикла и соответственно, вычислим серединное значение и отнимем полученную величину от всех ребер сети. Если теперь в нашей сети есть отрицательный цикл (этот факт можно проверить при помощи алгоритма Форда-Беллмана), значит существует цикл с меньшим средним весом, чем . Тогда продолжим поиск среди значений в диапазоне от до , иначе — от до . Такой алгоритм будет работать за , где — точность выбора величины среднего веса цикла.
Продвинутый алгоритм
Добавим к нашему графу вершину и ребра из нее во все остальные вершины. Запустим алгоритм Форда-Беллмана и попросим его построить нам квадратную матрицу со следующим условием: — длина минимального пути от до ровно из ребер. Тогда длина оптимального цикла минимального среднего веса вычисляется как .
Достаточно будет доказать это правило для , так как для других можно просто отнять эту величину от всех ребер и получить снова случай с .
Чтобы найти цикл после построения матрицы , запомним, при каких и достигается оптимальное значение , и, используя , поднимемся по указателям предков. Как только мы попадем в уже посещенную вершину — мы нашли цикл минимального среднего веса.
Этот алогоритм работает за .
См. также
- Использование потенциалов Джонсона при поиске потока минимальной стоимости
- Сведение задачи о назначениях к задаче о потоке минимальной стоимости