========================================
Iteration: 1
> 3 7 3 13 9 ~ [0]
19 13 19 12 7 ~ 0
3 14 4 15 7 ~ 0
17 13 4 17 6 ~ 0
| | | | | Rows potential
3 7 3 13 9 Auxiliary minima
5 5 5 5 5 Way back
[0] 0 0 0 0 0 Columns potential
+ Used columns
-1 -1 -1 -1 -1 0 Column-row matching
Delta: 3
========================================
Iteration: 1
> 3 7 3 13 9 ~ [3]
19 13 19 12 7 ~ 0
3 14 4 15 7 ~ 0
17 13 4 17 6 ~ 0
| | | | | Rows potential
0 4 0 10 6 Auxiliary minima
5 5 5 5 5 Way back
[0] 0 0 0 0 -3 Columns potential
+ Used columns
-1 -1 -1 -1 -1 0 Column-row matching
========================================
Iteration: 1
> [3] 7 3 13 9 ~ [3]
19 13 19 12 7 ~ 0
3 14 4 15 7 ~ 0
17 13 4 17 6 ~ 0
| | | | | Rows potential
0 4 0 10 6 Auxiliary minima
5 5 5 5 5 Way back
0 0 0 0 0 [-3] Columns potential
+ Used columns
0 -1 -1 -1 -1 0 Column-row matching
========================================
Iteration: 2
v [3] 7 3 13 9 ~ 3
> 19 13 19 12 7 ~ [0]
3 14 4 15 7 ~ 0
17 13 4 17 6 ~ 0
| | | | | Rows potential
19 13 19 12 7 Auxiliary minima
5 5 5 5 5 Way back
0 0 0 0 [0] -3 Columns potential
+ Used columns
0 -1 -1 -1 -1 1 Column-row matching
Delta: 7
========================================
Iteration: 2
v [3] 7 3 13 9 ~ 3
> 19 13 19 12 7 ~ [7]
3 14 4 15 7 ~ 0
17 13 4 17 6 ~ 0
| | | | | Rows potential
12 6 12 5 0 Auxiliary minima
5 5 5 5 5 Way back
0 0 0 0 [0] -10 Columns potential
+ Used columns
0 -1 -1 -1 -1 1 Column-row matching
========================================
Iteration: 2
v [3] 7 3 13 9 ~ 3
> 19 13 19 12 [7] ~ [7]
3 14 4 15 7 ~ 0
17 13 4 17 6 ~ 0
| | | | | Rows potential
12 6 12 5 0 Auxiliary minima
5 5 5 5 5 Way back
0 0 0 0 0 [-10] Columns potential
+ Used columns
0 -1 -1 -1 1 1 Column-row matching
========================================
Iteration: 3
v [3] 7 3 13 9 ~ 3
v 19 13 19 12 [7] ~ 7
> 3 14 4 15 7 ~ [0]
17 13 4 17 6 ~ 0
| | | | | Rows potential
3 14 4 15 7 Auxiliary minima
5 5 5 5 5 Way back
[0] 0 0 0 0 -10 Columns potential
+ Used columns
0 -1 -1 -1 1 2 Column-row matching
Delta: 3
========================================
Iteration: 3
v [3] 7 3 13 9 ~ 3
v 19 13 19 12 [7] ~ 7
> 3 14 4 15 7 ~ [3]
17 13 4 17 6 ~ 0
| | | | | Rows potential
0 11 1 12 4 Auxiliary minima
5 5 5 5 5 Way back
[0] 0 0 0 0 -13 Columns potential
+ Used columns
0 -1 -1 -1 1 2 Column-row matching
========================================
Iteration: 4
v [3] 7 3 13 9 ~ [3]
v 19 13 19 12 [7] ~ 7
> 3 14 4 15 7 ~ 3
17 13 4 17 6 ~ 0
| | | | | Rows potential
0 4 0 10 4 Auxiliary minima
5 0 0 0 5 Way back
0 0 [0] 0 0 -13 Columns potential
+ + Used columns
0 -1 -1 -1 1 2 Column-row matching
Delta: 0
========================================
Iteration: 4
v [3] 7 3 13 9 ~ [3]
v 19 13 19 12 [7] ~ 7
> 3 14 4 15 7 ~ 3
17 13 4 17 6 ~ 0
| | | | | Rows potential
0 4 0 10 4 Auxiliary minima
5 0 0 0 5 Way back
0 0 [0] 0 0 -13 Columns potential
+ + Used columns
0 -1 -1 -1 1 2 Column-row matching
========================================
Iteration: 4
v 3 7 [3] 13 9 ~ [3]
v 19 13 19 12 [7] ~ 7
> [3] 14 4 15 7 ~ 3
17 13 4 17 6 ~ 0
| | | | | Rows potential
0 4 0 10 4 Auxiliary minima
5 0 0 0 5 Way back
0 0 0 0 0 [-13] Columns potential
+ + Used columns
2 -1 0 -1 1 2 Column-row matching
========================================
Iteration: 5
v 3 7 [3] 13 9 ~ 3
v 19 13 19 12 [7] ~ 7
v [3] 14 4 15 7 ~ 3
> 17 13 4 17 6 ~ [0]
| | | | | Rows potential
17 13 4 17 6 Auxiliary minima
5 5 5 5 5 Way back
0 0 [0] 0 0 -13 Columns potential
+ Used columns
2 -1 0 -1 1 3 Column-row matching
Delta: 4
========================================
Iteration: 5
v 3 7 [3] 13 9 ~ 3
v 19 13 19 12 [7] ~ 7
v [3] 14 4 15 7 ~ 3
> 17 13 4 17 6 ~ [4]
| | | | | Rows potential
13 9 0 13 2 Auxiliary minima
5 5 5 5 5 Way back
0 0 [0] 0 0 -17 Columns potential
+ Used columns
2 -1 0 -1 1 3 Column-row matching
========================================
Iteration: 6
v 3 7 [3] 13 9 ~ [3]
v 19 13 19 12 [7] ~ 7
v [3] 14 4 15 7 ~ 3
> 17 13 4 17 6 ~ 4
| | | | | Rows potential
0 4 0 10 2 Auxiliary minima
2 2 5 2 5 Way back
[0] 0 0 0 0 -17 Columns potential
+ + Used columns
2 -1 0 -1 1 3 Column-row matching
Delta: 0
========================================
Iteration: 6
v 3 7 [3] 13 9 ~ [3]
v 19 13 19 12 [7] ~ 7
v [3] 14 4 15 7 ~ 3
> 17 13 4 17 6 ~ 4
| | | | | Rows potential
0 4 0 10 2 Auxiliary minima
2 2 5 2 5 Way back
[0] 0 0 0 0 -17 Columns potential
+ + Used columns
2 -1 0 -1 1 3 Column-row matching
========================================
Iteration: 7
v 3 7 [3] 13 9 ~ 3
v 19 13 19 12 [7] ~ 7
v [3] 14 4 15 7 ~ [3]
> 17 13 4 17 6 ~ 4
| | | | | Rows potential
0 4 0 10 2 Auxiliary minima
2 2 5 2 5 Way back
0 0 0 0 [0] -17 Columns potential
+ + + Used columns
2 -1 0 -1 1 3 Column-row matching
Delta: 2
========================================
Iteration: 7
v 3 7 [3] 13 9 ~ 5
v 19 13 19 12 [7] ~ 7
v [3] 14 4 15 7 ~ [5]
> 17 13 4 17 6 ~ 6
| | | | | Rows potential
0 2 0 8 0 Auxiliary minima
2 2 5 2 5 Way back
-2 0 -2 0 [0] -19 Columns potential
+ + + Used columns
2 -1 0 -1 1 3 Column-row matching
========================================
Iteration: 8
v 3 7 [3] 13 9 ~ 5
v 19 13 19 12 [7] ~ [7]
v [3] 14 4 15 7 ~ 5
> 17 13 4 17 6 ~ 6
| | | | | Rows potential
0 2 0 5 0 Auxiliary minima
2 2 5 4 5 Way back
-2 [0] -2 0 0 -19 Columns potential
+ + + + Used columns
2 -1 0 -1 1 3 Column-row matching
Delta: 2
========================================
Iteration: 8
v 3 7 [3] 13 9 ~ 7
v 19 13 19 12 [7] ~ [9]
v [3] 14 4 15 7 ~ 7
> 17 13 4 17 6 ~ 8
| | | | | Rows potential
0 0 0 3 0 Auxiliary minima
2 2 5 4 5 Way back
-4 [0] -4 0 -2 -21 Columns potential
+ + + + Used columns
2 -1 0 -1 1 3 Column-row matching
========================================
Iteration: 8
v 3 [7] 3 13 9 ~ 7
v 19 13 19 12 [7] ~ [9]
v [3] 14 4 15 7 ~ 7
> 17 13 [4] 17 6 ~ 8
| | | | | Rows potential
0 0 0 3 0 Auxiliary minima
2 2 5 4 5 Way back
-4 0 -4 0 -2 [-21] Columns potential
+ + + + Used columns
2 0 3 -1 1 3 Column-row matching
========================================
Assignment cost: 21

вариантов весьма неприятно при больших N. Существует ли какой-либо более разумных способ алгоритмизации слов "оптимальное назначение существует"?
может сделать работу 1 за
, работу 2 за
;
может сделать работу 1 за
, то ваш алгоритм выдаст решение стоимостью
.
. При чтении текста сразу чувствуется, что автор понимает, что пишет (чего не скажешь об авторах статей в википедии). Разъяснение толковое, вариант кода рабочий. Я уже даже перевёл его на Java.
.
) if using Dijkstra’s algorithm with Fibonacci heaps for finding shortest paths).
— это число работ (строк в матрице или левых вершин в двудольном графе), а
— число доступных работников (столбцов или правых вершин в двудольном графе), из которых требуется подобрать оптимальное по стоимости назначение, то суммарное число всех доступных назначений
(конечных стоимостей в матрице или рёбер в двудольном графе) удовлетворяет условию
.
, где
.
. Алгоритмы поиска максимальных паросочетаний для меня пока представляют чисто познавательный интерес. Не представляю, куда их можно применить.
— это как раз максимальный разрешённый целочисленный вес ребра (или коэффициент в матрице).
и
). Английское название имеет корни в теории линейного программирования (двойственная задача), сильно специализированным случаем которого является задача о назначениях. Второй момент — это наличие понятий теории двудольных графов, в частности паросочетаний и увеличивающих путей.
, рассчитываемые на основе исходных весов
по формуле



, типа
выигрывал у структур с
, и ассоциированной с ним структурой, поддерживающее частичное упорядочивание (для возможности определения экстремального элемента) за время
. Желательно, чтобы сортирующая структура тоже была реализована внутри массива, так как, когда все рабочие массивы прокэшированы процессором, скорость работы будет максимальна. Фибоначчиева куча по этой причине сразу отпадает. Я делал выбор между деревом отрезков и двоичной кучей (возможно ещё что-то существует?), выбор пал на двоичную кучу, так как она компактнее по размерам и не поддерживает излишний функционал.