Сведение задачи о назначениях к задаче о потоке минимальной стоимости — различия между версиями
(Новая страница: «== Постановка задачи == * Дана квадратная матрица <tex>A_{N\times N}</tex>. Нужно выбрать в ней <tex>N</tex> э…») |
|||
Строка 14: | Строка 14: | ||
Найдём в полученном графе <tex>G</tex> максимальный [[Поток минимальной стоимости|поток минимальной стоимости]]. <br /> | Найдём в полученном графе <tex>G</tex> максимальный [[Поток минимальной стоимости|поток минимальной стоимости]]. <br /> | ||
Понятно, что величина потока будет равна <tex>N</tex>. Заметим, что для каждой вершины <tex>i</tex> из первой доли найдётся только одна вершина <tex>j</tex> из второй доли, такая, что поток <tex>F_{ij} = 1</tex>. Поскольку найденный поток имеет минимальную стоимость, то сумма стоимостей выбранных рёбер будет наименьшей из возможных. Поэтому, это взаимно однозначное соответствие между вершинами первой доли и вершинами второй доли является решением задачи. | Понятно, что величина потока будет равна <tex>N</tex>. Заметим, что для каждой вершины <tex>i</tex> из первой доли найдётся только одна вершина <tex>j</tex> из второй доли, такая, что поток <tex>F_{ij} = 1</tex>. Поскольку найденный поток имеет минимальную стоимость, то сумма стоимостей выбранных рёбер будет наименьшей из возможных. Поэтому, это взаимно однозначное соответствие между вершинами первой доли и вершинами второй доли является решением задачи. | ||
+ | |||
+ | == Источники == | ||
+ | [http://e-maxx.ru/algo/assignment_mincostflow Задача о назначениях. Решение с помощью min-cost-flow] |
Версия 11:41, 14 января 2011
Постановка задачи
- Дана квадратная матрица . Нужно выбрать в ней элементов так, чтобы в каждой строке и столбце был выбран только один элемент, а сумма значений этих элементов была наименьшей.
- Имеется заказов и станков. Про каждый заказ известна стоимость его изготовления на каждом станке. На каждом станке можно выполнять только один заказ. Требуется распределить все заказы по станкам так, чтобы минимизировать суммарную стоимость.
Сведение к задаче о потоке минимальной стоимости
Построим двудольный граф
следующим образом:- Имеется сток и исток .
- В первой доле находятся вершин, соответствующие строкам матрицы или заказам.
- Во второй вершин, соответствующие столбцам матрицы или станкам.
- Между каждой вершиной первой доли и каждой вершиной второй доли проведём ребро с пропускной способностью 1 и стоимостью .
- От истока проведём рёбра ко всем вершинам первой доли с пропускной способностью 1 и стоимостью 0.
- От каждой вершины второй доли к стоку проведём ребро с пропускной способностью 1 и стоимостью 0.
Найдём в полученном графе поток минимальной стоимости.
Понятно, что величина потока будет равна . Заметим, что для каждой вершины из первой доли найдётся только одна вершина из второй доли, такая, что поток . Поскольку найденный поток имеет минимальную стоимость, то сумма стоимостей выбранных рёбер будет наименьшей из возможных. Поэтому, это взаимно однозначное соответствие между вершинами первой доли и вершинами второй доли является решением задачи.