Сведение задачи о назначениях к задаче о потоке минимальной стоимости — различия между версиями
(→Сведение к задаче о потоке минимальной стоимости) |
|||
Строка 5: | Строка 5: | ||
== Сведение к задаче о потоке минимальной стоимости == | == Сведение к задаче о потоке минимальной стоимости == | ||
[[Файл:pic1.PNG|thumb|right|275x250px|Пример построенного графа для матрицы А]] | [[Файл:pic1.PNG|thumb|right|275x250px|Пример построенного графа для матрицы А]] | ||
− | Построим | + | Построим ориентированный граф, состоящий из двух частей <tex>G</tex> следующим образом: |
* Имеется исток <tex>S</tex> и сток <tex>T</tex>. | * Имеется исток <tex>S</tex> и сток <tex>T</tex>. | ||
− | * В первой | + | * В первой части находятся <tex>N</tex> вершин, соответствующие строкам матрицы или заказам. |
* Во второй <tex>N</tex> вершин, соответствующие столбцам матрицы или станкам. | * Во второй <tex>N</tex> вершин, соответствующие столбцам матрицы или станкам. | ||
− | * Между каждой вершиной <tex>i</tex> первой | + | * Между каждой вершиной <tex>i</tex> первой части и каждой вершиной <tex>j</tex> второй части проведём ребро с пропускной способностью 1 и стоимостью <tex>A_{ij}</tex>. |
− | * От истока <tex>S</tex> проведём рёбра ко всем вершинам <tex>i</tex> первой | + | * От истока <tex>S</tex> проведём рёбра ко всем вершинам <tex>i</tex> первой части с пропускной способностью 1 и стоимостью 0. |
− | * От каждой вершины второй | + | * От каждой вершины второй части <tex>j</tex> к стоку <tex>T</tex> проведём ребро с пропускной способностью 1 и стоимостью 0. |
Найдём в полученном графе <tex>G</tex> максимальный [[Поток минимальной стоимости|поток минимальной стоимости]]. <br /> | Найдём в полученном графе <tex>G</tex> максимальный [[Поток минимальной стоимости|поток минимальной стоимости]]. <br /> | ||
− | Понятно, что величина потока будет равна <tex>N</tex>. Заметим, что для каждой вершины <tex>i</tex> из первой | + | Понятно, что величина потока будет равна <tex>N</tex>. Заметим, что для каждой вершины <tex>i</tex> из первой части найдётся только одна вершина <tex>j</tex> из второй части, такая, что поток <tex>f(i, j) = 1</tex>. Поскольку найденный поток имеет минимальную стоимость, то сумма стоимостей выбранных рёбер будет наименьшей из возможных. Поэтому это взаимно однозначное соответствие между вершинами первой части и вершинами второй части является решением задачи. |
+ | |||
== Асимптотика == | == Асимптотика == | ||
Асимптотика этого решения равна асимптотике алгоритма, выбранного для поиска потока. | Асимптотика этого решения равна асимптотике алгоритма, выбранного для поиска потока. |
Версия 21:06, 29 февраля 2012
Содержание
Постановка задачи
- Дана квадратная матрица . Нужно выбрать в ней элементов так, чтобы в каждой строке и в каждом столбце был выбран только один элемент, а сумма значений этих элементов была наименьшей.
- Имеется заказов и станков. Про каждый заказ известна стоимость его изготовления на каждом станке. На каждом станке можно выполнять только один заказ. Требуется распределить все заказы по станкам так, чтобы минимизировать суммарную стоимость.
Сведение к задаче о потоке минимальной стоимости
Построим ориентированный граф, состоящий из двух частей
следующим образом:- Имеется исток и сток .
- В первой части находятся вершин, соответствующие строкам матрицы или заказам.
- Во второй вершин, соответствующие столбцам матрицы или станкам.
- Между каждой вершиной первой части и каждой вершиной второй части проведём ребро с пропускной способностью 1 и стоимостью .
- От истока проведём рёбра ко всем вершинам первой части с пропускной способностью 1 и стоимостью 0.
- От каждой вершины второй части к стоку проведём ребро с пропускной способностью 1 и стоимостью 0.
Найдём в полученном графе поток минимальной стоимости.
Понятно, что величина потока будет равна . Заметим, что для каждой вершины из первой части найдётся только одна вершина из второй части, такая, что поток . Поскольку найденный поток имеет минимальную стоимость, то сумма стоимостей выбранных рёбер будет наименьшей из возможных. Поэтому это взаимно однозначное соответствие между вершинами первой части и вершинами второй части является решением задачи.
Асимптотика
Асимптотика этого решения равна асимптотике алгоритма, выбранного для поиска потока.
Источники
- Задача о назначениях. Решение с помощью min-cost-flow
- Ravindra Ahuja, Thomas Magnanti, James Orlin. Network flows (1993)