Типовой расчет 1
Найдите максимальное и минимальное назначение для задачи с матрицей
2 |
4 |
1 |
4 |
7 |
2 |
1 |
3 |
6 |
8 |
3 |
4 |
7 |
9 |
6 |
N |
2 |
9 |
2N |
8 |
8 |
N |
7 |
9 |
N |
Решение
Найдем максимальное назначение
Шаг 1: Преобразуем матрицу, заменив каждый элемент матрицы разностью максимального элемента этой строки и самого элемента.
5 |
3 |
6 |
3 |
0 |
Max=7 |
6 |
7 |
5 |
2 |
0 |
Max=8 |
6 |
5 |
2 |
0 |
3 |
Max=9 |
N |
2N -2 |
2N -9 |
0 |
2N -8 |
Max=2N |
N -8 |
0 |
N -7 |
N -9 |
0 |
Max=N |
Шаг 2.
Требуется получить нули в каждой строке и в каждом столбце. В первом, и третьем столбцах нулей нет, вычтем из элементов этих столбцов минимальный элемент соответствующего столбца.
0 |
3 |
4 |
3 |
0 |
1 |
7 |
3 |
2 |
0 |
1 |
5 |
0 |
0 |
3 |
N-1 |
2N -2 |
2N -11 |
0 |
2N -8 |
N -9 |
0 |
N -9 |
N -9 |
0 |
Шаг 3.
Получили матрицу, в которой в каждой строки и каждом столбце есть ноль. Нашей целью является отметить по одной ячейке в каждой строке и каждом столбце так, чтобы они были нулевые. Отметим соответствующие ячейки желтым цветом .
0 |
3 |
4 |
3 |
0 |
1 |
7 |
3 |
2 |
0 |
1 |
5 |
0 |
0 |
3 |
N-1 |
2N -2 |
2N -11 |
0 |
2N -8 |
N -9 |
0 |
N -9 |
N -9 |
0 |
Получили матрицу с пятью нулями, по одному в каждой строке и столбце, следовательно, можно провести назначения (распределение работ и т.д.) по матрице:
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
И стоимость (рациональность, время работ и т.д.) такого назначения составит:
Найдем минимальное назначение
2 |
4 |
1 |
4 |
7 |
2 |
1 |
3 |
6 |
8 |
3 |
4 |
7 |
9 |
6 |
N |
2 |
9 |
2N |
8 |
8 |
N |
7 |
9 |
N |
Шаг 1: Преобразуем матрицу, заменив каждый элемент матрицы разностью самого элемента и минимального элемента строки.
1 |
3 |
0 |
3 |
6 |
1 |
0 |
2 |
5 |
7 |
0 |
1 |
4 |
6 |
3 |
N-2 |
0 |
7 |
2N-2 |
6 |
1 |
N-7 |
0 |
2 |
N-7 |
Шаг 2.
Требуется получить нули в каждой строке и в каждом столбце. В четвертом, и пятом столбцах нулей нет, вычтем из элементов этих столбцов минимальный элемент соответствующего столбца.
1 |
3 |
0 |
1 |
3 |
1 |
0 |
2 |
3 |
4 |
0 |
1 |
4 |
4 |
0 |
N-2 |
0 |
7 |
2N-4 |
3 |
1 |
N-7 |
0 |
0 |
N-10 |
Шаг 3.
Получили матрицу, в которой в каждой строки и каждом столбце есть ноль. Нашей целью является отметить по одной ячейке в каждой строке и каждом столбце так, чтобы они были нулевые. Отметим соответствующие ячейки желтым цветом.
1 |
3 |
0 |
1 |
3 |
1 |
0 |
2 |
3 |
4 |
0 |
1 |
4 |
4 |
0 |
N-2 |
0 |
7 |
2N-4 |
3 |
1 |
N-7 |
0 |
0 |
N-10 |
Не удалось отметить 0 в четвертой строке.
Проводим модификацию матрицы. Вычеркиваем строки и столбцы с возможно большим количеством нулевых элементов: строки 5,3 столбец 2, Получаем сокращенную матрицу (элементы не выделены).
1 |
3 |
0 |
1 |
3 |
1 |
0 |
2 |
3 |
4 |
0 |
1 |
4 |
4 |
0 |
N-2 |
0 |
7 |
2N-4 |
3 |
1 |
N-7 |
0 |
0 |
N-10 |
Минимальный элемент сокращенной матрицы (1) вычитаем из всех ее элементов:
0 |
3 |
0 |
0 |
2 |
|
0 |
0 |
1 |
2 |
3 |
|
0 |
1 |
4 |
4 |
0 |
|
N-3 |
0 |
6 |
2N-5 |
2 |
|
1 |
N-7 |
0 |
0 |
N-10 |
|
Затем складываем минимальный элемент с элементами, расположенными на пересечениях вычеркнутых строк и столбцов:
0 |
3 |
0 |
0 |
2 |
0 |
0 |
1 |
2 |
3 |
0 |
2 |
4 |
4 |
0 |
N-3 |
0 |
6 |
2N-4 |
2 |
1 |
N-6 |
0 |
0 |
N-10 |
Получили матрицу, в которой в каждой строки и каждом столбце есть ноль. Нашей целью является отметить по одной ячейке в каждой строке и каждом столбце так, чтобы они были нулевые. Отметим соответствующие ячейки желтым цветом.
0 |
3 |
0 |
0 |
2 |
|
0 |
0 |
1 |
2 |
3 |
|
0 |
2 |
4 |
4 |
0 |
|
N-3 |
0 |
6 |
2N-4 |
2 |
|
1 |
N-6 |
0 |
0 |
N-10 |
|
|
|
|
|
|
|
Получили матрицу с пятью нулями, по одному в каждой строке и столбце, следовательно, можно провести назначения (распределение работ и т.д.) по матрице:
0 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
И стоимость (рациональность, время работ и т.д.) такого назначения составит:
Типовой расчет 2. Решите задачу коммивояжера жадным алгоритмом и алгоритмом удвоения ребер минимального остова для матрицы расстояний между всеми парами из пяти вершин.
0 |
4 |
1 |
4 |
7 |
4 |
0 |
3 |
6 |
8 |
1 |
3 |
0 |
9 |
6 |
4 |
6 |
9 |
0 |
N |
7 |
8 |
6 |
N |
0 |
Решение
Самый очевидный алгоритм решения задачи коммивояжера — жадный: из текущего города иди в ближайший из тех, куда ещё не ходил. Если выполняется неравенство треугольника, нетрудно доказать, что этот алгоритм ошибается не более, чем в два раза. Трудоемкость этого алгоритма O(V2).
Запускаем жадный алгоритм из вершины 1, кратчайшее расстояние до вершины 3, равное 1. Из вершины 3 кратчайшее расстояние до вершины 2( за исключением уже посещенной вершины 1) равное 3. Из вершины 2 кратчайшее расстояние( до оставшихся вершин 4 и 5 ) расстояние до вершины 4 , равное 6, от вершины 4 до вершины 5 расстояние равно N. Расстояние от вершины 5 до вершины 1 равно 7. Длина полученного цикла 1,3,2,4,5,1 равна 1+3+6+N+7=N+17.
Построим дерево-остов минимального веса с помощью алгоритма Прима.
Алгоритм Прима обладает тем свойством, что ребра в множестве А всегда образуют единое дерево. Дерево начинается с произвольной корневой вершины г и растет до тех пор, пока не охватит все вершины в V. На каждом шаге к дереву А добавляется легкое ребро, соединяющее дерево и отдельную вершину из оставшейся части графа. Данное правило добавляет только безопасные для А ребра; следовательно, по завершении алгоритма ребра в А образуют минимальное остовное дерево. Данная стратегия является жадной, поскольку на каждом шаге к дереву добавляется ребро, которое вносит минимально возможный вклад в общий вес.
Начнем с вершины с номером 1, добавим ребро {1,3} , которое имеет минимальный вес среди ребер, инцидентных вершине 1равный 1, затем ребро {3,2} веса 3, {2,4} веса 6, {4,5} веса N получим минимальное дерево-остов Т.Построим мультиграф, путем удвоения ребер в дереве Т.
Рис.1
Длина полученного цикла равна 1+3+6+N+N+6+3+1=2N+20.
Типовой расчет 3,4. Задан следующий орграф.
Дуга (s,v1) c весом 8, дуга(s,v2) c весом 9, дуга (v1, v2) c весом N, дуга (v1,t) c весом 4, дуга (v2,t) c весом 1, дуга (s,t) c весом 20. Найдите максимальный поток и минимальный разрез в сети, считая вес дуги ее пропускной способностью. Найдите минимальный путь из вершины s в вершину t.
Решение.
Нарисуем граф.
Рис.1.
Простой, связный орграф G будем называть транспортной сетью (или просто сетью), если выполняются следующие условия: - существует вершина s (источник), в которую не входит ни одна дуга, - существует вершина t (сток), из которой не выходит ни одна дуга, - каждой дуге eij приписано целое число сij≥0, называемое пропускной способностью дуги. Потоком в сети называют функцию, сопоставляющую каждой дуге целое неотрицательное число fij≥0(значение потока через дугу) так, чтобы
1) fij≤ сij, т.е. не превышало пропускной способности дуги
2) Для каждой промежуточной вершины (любой вершины, кроме s и t) выполнялось условие: сумма значений потоков по входящим в вершину дугам была равна сумме значений потоков по исходящим из неё дугам.
3) Для вершины s сумма исходящих потоков равна сумме потоков, входящих в вершину t.
Величиной потока, обозначают Val f, называют сумму значений потока на всех дугах, выходящих из источника s, равную сумме значений потока на всех дугах, входящих в сток t. Поток называется максимальным, если его величина наибольшая из возможных. Дуга eij называется насыщенной, если fij= сij, т.е. значение потока через дугу равно пропускной способности дуги.
Теорема Форда – Фолкерсона. Величина максимального потока в сети из вершины s в вершину t равна величине минимального сечения между этими вершинами.