Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Дискретная математика

.pdf
Скачиваний:
13
Добавлен:
23.06.2023
Размер:
2.32 Mб
Скачать

 

s

HH

s

 

s

H

s

v1

 

@

w1

v1 HH w1

H

@

v2 s HHHsw2

v2 s HHHsw2

v3

s

 

sw3

v3

s

 

sw3

v4 s

 

sw4

v4 s

 

sw4

 

 

П2

sw5

 

 

П2

sw5

 

 

 

 

 

 

4.

v

H

 

w

1

sJ HH s 1

 

J H

 

H

v2 s JJ Hsw2

 

JJ

 

 

v3

s@@ JJ

sw3

v4 s @@

Jsw4

 

 

@@sw5

G

Опять ищем тонкую цепь. Последовательность ребер

v4 7→w3 7→v3 7→w5

- искомая цепь, соединяющая ненасыщенные вершины v4 и w5.

Ребра {v4, w3} и {v3, w5}, входящие в данную цепь - тонкие, ребро {v3, w3} - толстое.

5.Исключим ребро {v3, w3} из паросочетания П2, включив тонкие ребра.

v1 sHHH sw1

v1 sHHH sw1

v2 s HHHsw2

v2 s HHHsw2

 

s@@

 

s

 

s @

 

s

v3

@

w3

v3

@

 

w3

 

@

 

sw4

v4 s @@

 

sw4

v4 s @@

 

 

П3

@@sw5

 

П3

@@sw5

 

 

 

 

 

 

П3 = {{v1, w2}, {v2, w1}, {v4, w3}, {v3, w5}}

221

- полное паросочетание.

6.Так как ненасыщенная вершина w4 в графе одна, тонкой цепи, соединяющей две ненасыщенные вершины, нет. Алгоритм закончен. Паросочетание П3 - искомое максимальное.

Так как |П3| = 4 = |V |, то П3 является также совершенным паросочетанием.

Пример 12.5. Найти максимальное паросочетание в графе G:

 

 

 

 

 

v

 

H

 

w

 

 

 

 

 

 

1

sJ HH

 

s 1

 

 

 

 

 

 

 

s

 

H

 

s

 

 

 

 

 

 

 

 

J HH

 

 

 

 

 

 

 

v2

H J

H

w2

 

 

 

 

 

 

 

@HJ

 

 

 

 

 

 

v3 s

@ JH

 

sw3

 

 

 

 

 

@ JHH

 

 

 

 

 

@J

 

 

 

 

 

 

v4

s @J@J

sw4

 

 

 

 

 

 

 

 

 

G

 

 

Решение.

 

 

П1 = {{v1, w2}, {v2, w1}, {v4, w4}} - полное па-

v1 sHHH sw1

росочетание.

 

 

v2 s

HH

Hsw2

Несмотря на то, что вершины v3 и w3 нена-

 

сыщенные, П1 - максимальное паросочетание,

v3 s

 

 

sw3

так как тонкой цепи (то есть цепи с чередова-

 

 

нием тонких и толстых ребер), соединяющей

v4

s

 

 

sw4

эти две вершины, нет. Значит, П1 - максималь-

 

 

П1

 

 

ное, хотя и не совершенное паросочетание.

12.3Задача об оптимальном назначении

12.3.1Постановка задачи

Задача 12.2. n работников выполняют n работ. Каждый i рабочий выполняет j работу с эффективностью cij > 0. Требуется распределить работу между работниками таким образом, чтобы суммарная эффективность работ была бы максимальной.

222

Данная задача обычно называется задачей об оптимальном назначении. Эффективность выполнения работ как правило задается квадратной матрицей Cn×n = {cij}, элементом cij которой является эффективность выполнения i-тым рабочим j-той работы (строки матрицы соответствуют работникам, столбцы - выполняемым работам).

Задачу удобно формулировать с помощью графов.

Дан двудольный граф G =< (V, W ), E >, ребра {vi, wj} которого имеют вес cij (вес ребра равен эффективности выполняемой работы), множество V вершин соответствует рабочим, множество W - работам. В графе G требуется выделить такое совершенное паросочетание П, чтобы сумма весов ребер, вошедших в П, была бы максимальной среди сумм весов всех возможных совершенных паросочетаний графа G.

Эту задачу обычно решают с помощью следующего алгоритма.

12.3.2Алгоритм поиска оптимального назначения

1. В каждой строке матрицы эффективности находим максимальный элемент ai = max cij и подчеркиваем его (очевидно, что

j=1;:::;n

таких элементов в строке может быть несколько). Всем строкам приписываем метки, равные ai, всем столбцам - метки bj = 0.

2.Строим двудольный граф G =< (V, W ), E >, соответствующий подчеркнутым элементам. Число вершин в обеих долях равно n - порядку матрицы эффективности (|V | = |W | = n).

Если элемент cij матрицы Cn×n подчеркнут, то в графе G рисуем ребро {vi, wj} с весом cij. Ребро {vi, wj} соединяет вершину vi из левой доли графа G с вершиной wj из правой доли.

3.Используя венгерский алгоритм, выделяем в графе G максимальное паросочетание.

4.Если построенное паросочетание совершенно (|П| = |V | = n), то найденное паросочетание - искомое оптимальное назначение. Алгоритм заканчивает свою работу (переход к пункту 7 нашего алгоритма).

5. Если |П| ≠ |V | = n, то, согласно теореме Холла, среди вершин V графа G можно выделить такое подмножество вершин S, что

223

|S| > |φ(S)|, где φ(S) - окружение множества S (вершины из W , смежные с вершинами из S). Находим множество S V , удовлетворяющее указанному неравенству.

Метки ai, соответствующие вершинам из S, понижаем на 1. Остальные метки, приписанные строкам, не меняем. Метки bj, соответствующие вершинам из φ(S), повышаем на 1. Остальные метки, приписанные столбцам, оставляем без изменения.

6.Находим такие элементы cij в матрице эффективности, что значение элемента равно сумме меток, приписанных строке i и столбцу j, на пересечении которых он находится: cij = ai + bj. Подчеркиваем эти элементы и переходим к пункту 2.

7.(Окончание работы алгоритма).

Выписываем найденное совершенное паросочетание П . Оно задает оптимальное распределение работ между работниками. Суммируем веса всех ребер, вошедших в паросочетание. Полученная

сумма эфф - максимальная эффективность выполнения всех работ.

Заметим, что оптимальное распределение всех работ между работниками может быть не единственным, но их суммарная эффек-

тивность эфф одинакова для всех совершенных паросочетаний, полученных в результате работы данного алгоритма.

8.Делаем проверку полученного назначения. Эффективность эфф, равная сумме весов ребер, вошедших в итоговое паросочетание

П , должна равняться сумме меток всех строк и всех столбцов на момент завершения алгоритма:

∑ ∑

эфф =

ai + bj.

i

j

Пример 12.6. Решить задачу об оптимальном назначении с матрицей

 

 

4

6

5

5

 

 

4

6

8

4

эффективности C =

 

3

9

8

4

 

 

 

 

 

5

7

5

6

 

 

 

 

Решение.

224

1.Находим максимальные элементы каждой строки, подчеркиваем их.

2.Метки ai, приписанные строкам, равны максимальным элементам строки:

a1 = max{4, 6, 5, 5} = 6, a2 = max{3, 9, 8, 4} = 9,

a3 = max{5, 7, 5, 6} = 7, a4 = max{4, 6, 8, 4} = 8.

Все метки, приписанные столбцам, равны 0:

 

 

 

 

 

 

 

 

 

 

b1 = b2 = b3 = b4 = 0.

 

 

 

 

 

 

 

 

0

0

0

0

 

Метки строк a

 

записываем левее эле-

 

 

 

 

 

 

 

 

 

 

 

 

 

ментов матрицыi

напротив соответству-

6

 

 

4

6

5

5

 

 

9

 

 

3

9

8

4

 

 

ющей строки, метки столбцов bj - вы-

 

 

 

 

 

 

7

 

 

5

7

5

6

 

 

ше элементов матрицы напротив соот-

 

 

 

 

 

 

8

 

 

4

6

8

4

 

 

ветствующего столбца.

 

 

 

3. Строим граф G1, ребра которого соответствуют подчеркнутым

элементам матрицы C.

 

 

 

 

 

 

 

 

v1 HH

HH6

 

w1

 

Так как |V | = |W | = 4, каждая доля графа

 

s

 

 

s

 

G1 содержит по 4 вершины.

 

 

 

 

s

9

 

H

 

sw2

 

В графе G1 4 ребра.

 

 

 

 

 

 

 

v2

 

7 H

 

 

 

 

 

 

 

 

v3 s

 

sw3

 

Подчеркнутому элементу c12 = 6 соответ-

 

 

 

ствует ребро {v1, w2};

 

 

 

 

 

 

v4 8

 

 

w4

 

элементу c22 = 9 - ребро {v2, w2};

 

 

s

 

G1

 

s

 

элементу c32 = 7 - ребро

{

v3, w2

}

;

 

 

 

 

 

 

 

 

 

 

элементу c43 = 8 - ребро {v4, w3}.

 

4. Находим максимальное паросочетание П1 в графе G1.

 

v1 sHHHH6

 

sw1

 

 

 

 

 

 

 

 

 

 

 

 

v2 s

 

 

 

HHsw2

 

В него входит 2 ребра: ребро {v4, w3} и лю-

v3 s

 

 

 

sw3

 

бое из ребер, инцидентных вершине w

, на-

 

 

 

 

 

 

v

, w

2}.

 

 

 

2

 

v4 s 8

 

 

sw4

 

пример, ребро { 1

 

 

 

 

 

 

 

 

 

П1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5.Поскольку |П1| = 2 ≠ |V | = 4, паросочетание П1 не является совершенным. Значит, по теореме Холла найдется такое подмножество S вершин из левой доли, что выполняется неравенство

225

|S| > |φ(S)|, где φ(S) - окружение множества S.

В качестве множества S можно взять все вершины из V , так как в графе G1 количество вершин, смежных с вершинами из V меньше, чем число вершин в V :

|V | = 4 > |φ(V )| = 2.

Мы возьмем только 3 вершины из левой доли: S = {v1, v2, v3}, отбросив ребро {v4, w3} графа G1, так как вершины v4 и w3 инцидентны только одному ребру.

Все вершины множества S смежны только с вершиной w2:

S= {v1, v2, v3}, φ(S) = {w2}; |S| = 3 > |φ(S)| = 1.

6.Понизим на 1 метки, приписанные вершинам v1, v2 и v3:

a1 = 6 1 = 5, a2 = 9 1 = 8, a3 = 7 1 = 6.

 

 

 

 

0

1

0

0

 

Метку, приписанную вершине

 

 

 

 

 

 

w2, повысим на 1:

 

 

 

0

0

0

0

 

 

 

 

 

 

 

 

 

 

 

5

6

4

6

5

5

 

b2 = 0 + 1 = 1.

8

9

3

9

8

4

 

 

 

 

 

 

 

 

 

 

6

7

5

7

5

6

 

Метки, приписанные осталь-

 

 

 

8

8

4

6

8

4

 

ным вершинам, оставляем без

 

 

 

 

 

 

 

 

 

изменения.

 

 

 

 

 

 

 

7.Находим в матрице С элементы cij = ai + bj, значение которых равно сумме меток, приписанных строке i и столбцу j, на пересечении которых находится элемент cij. Все уже подчеркнутые элементы удовлетворяют этому равенству. Найдем другие элементы, для которых это равенство верно и дважды подчеркнем их.

В первой строке таких элементов два:

c13 = 5 = a1 + b3 = 5 + 0; c14 = 5 = a1 + b4 = 5 + 0.

 

 

0

1

0

0

 

В двух следующих строках таких элемен-

 

 

тов по одному:

 

 

 

 

 

 

 

 

 

5

4

6

5

5

 

 

 

 

 

 

 

 

 

 

 

 

 

8

3

9

8

4

c = 8 = a + b = 8 + 0;

 

 

 

 

 

 

 

c23

= 6 = a2

+ b3 = 6 + 0.

6

5 7

5

6

 

 

 

 

 

 

 

 

 

34

3

4

 

 

 

 

 

 

 

 

 

 

 

8

4

6

8

4

 

 

 

 

 

 

 

 

 

 

 

 

В последней строке таких элементов нет.

 

 

 

 

 

 

 

226

8. Построим граф G2, ребра которого соответствуют подчеркнутым элементам матрицы C.

v

 

H

 

 

 

 

w

 

 

1

sJ@J@HHH

 

 

s 1

 

 

 

s

HH

HH

s

Все ребра графа G1 являются также ребра-

v2

 

J@

 

H

 

J @ w2

 

 

 

JH@

 

 

ми графа G2. Добавляются ребра, соответ-

v3

sHHH J

sw3

ствующие дважды подчеркнутым элемен-

v4

s HHJHJsw4

там матрицы.

 

 

 

 

G2

 

 

 

 

9. Находим максимальное паросочетание П2 в графе G2.

v1

sHHHH6

 

sw1

 

v2

s

6H

HHsw2

В него входит 3 ребра.

 

 

s

 

 

s

Так как |П2| = 3 ̸= |V | = 4, паросочетание

v3

HH

 

w3

v4

s8 HHHsw4

П2 не является совершенным.

 

 

 

 

П2

 

 

 

 

10.По теореме Холла найдется такое подмножество S вершин из V , что его окружение содержит меньшее количество вершин. В S войдут все вершины из V , так как они смежны с тремя вершинами из W :

S= {v1, v2, v3, v4}, φ(S) = {w2, w3, w4}; |S| = 4 > |φ(S)| = 3.

11.Вершины из S приписанные им метки понижают на 1 :

a1 = 5 1 = 4, a2 = 8 1 = 7, a3 = 6 1 = 5, a4 = 8 1 = 7.

Вершины из множества φ(S) приписанные им метки повышают на 1:

 

 

 

b2 = 1 + 1 = 2, b3 = 0 + 1 = 1, b4 = 0 + 1 = 1.

 

 

 

 

 

2

1

1

 

 

 

 

 

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4

5

0

1

0

0

 

Метка b1 = 0, приписанная

 

4

6

 

5

5

 

 

вершине w1, остается без изме-

 

 

 

 

 

 

 

 

 

 

 

7

8

3

9

 

8

4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5

6

5

7

5

6

 

нения.

 

 

 

 

 

 

 

 

 

 

 

 

 

7

8

4

6

8

4

 

 

 

 

 

 

 

227

= 4; паросочетание П3 - совершенное.
v3 sHH6H sw3 v4 s8 HHHsw4

12. Находим в матрице эффективности элементы cij = ai + bj.

 

 

0

2

1

1

 

Кроме всех уже подчеркнутых элемен-

 

 

тов, для которых это равенство верно,

 

 

 

 

 

 

 

 

4

4

6

5

5

 

 

подчеркнем еще два элемента:

 

 

 

 

 

 

 

 

 

7

3

9

8

4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

c11 = 4 = a1 + b1 = 4 + 0;

 

5

5

7

5

6

 

 

 

 

 

 

 

 

 

 

 

 

7

4

6

8

4

 

c31 = 5 = a3 + b1 = 5 + 0.

Других элементов, для которых было бы выполнено равенство, нет.

13. Строим граф G3, ребра которого

черкнутым

 

элементам

матрицы C

паросочетание П3 в графе G3.

4

v

 

H

 

 

w

v

 

s

 

 

 

 

 

 

1

sJ@HJ@HH s 1

 

1

9

v2

 

J@ HH

w2

v2

s

H

J @

 

 

 

s

HH

 

s

 

 

 

 

 

 

JH@

 

 

 

 

 

 

 

 

JHH@

 

 

 

 

 

v3 sHHH J

sw3

 

 

 

 

v4 s HHJHJsw4

 

 

 

П3

 

 

 

G3

 

 

 

 

 

|П3| = 4 = |V |

соответствуют всем под- и находим максимальное

sw1 sw2

14. Оптимальное распределение работ между работниками:

П3 = {( {v1, w1}, 4), ({v2, w2}, 9), ({v3, w4}, 6), ({v4, w3}, 8) };

эфф = 4 + 9 + 6 + 8 = 27

-суммарная максимальная эффективность всех выполняемых работ.

15.Проверка:

4

ai = 4 + 7 + 5 + 7 = 23;

i=1

4

bj = 0 + 2 + 1 + 1 = 4;

j=1

4

ai + bj = 23 + 4 = 27 = эфф (верно).

1

228

Пример 12.7. Решить задачу об оптимальном назначении с матрицей

 

 

 

 

 

 

 

 

2

5

 

4

2

 

5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4

3

 

7

4

 

6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4

2

 

3

4

 

6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

эффективности

C =

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3

5

 

2

3

 

4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

6

 

5

2

 

3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Решение.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1. Найдем и подчеркнем максимальные элементы в строке.

 

 

 

0

0

0

0 0

 

 

В первой строке 2 максимальных эле-

 

 

 

5

 

2

5

4

2

5

 

мента, подчеркиваем оба. Приписыва-

 

7

 

4

3

7

4

6

 

 

ем строкам и столбцам соответствую-

6

 

4

2

3

4

6

 

 

 

 

 

 

 

 

 

 

 

щие метки:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5

3 5 2 3 4

 

 

a

 

= 5 a

 

= 7

 

a

 

 

= 6 a

 

= 5 a

 

= 6

 

 

 

1

2

,

3

4

5

 

 

 

 

 

 

 

 

 

 

 

 

,

 

 

 

 

 

 

 

 

 

,

 

 

 

,

;

 

6

2 6 5 2 3

 

 

 

 

b

1

= b

2

= b

3

= b

4

= b

5

= 0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

2. Строим граф G1, находим в нем максимальное паросочетание П1.

 

 

 

v

H

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

v

 

 

 

H

HHH5

 

 

w

 

 

 

 

 

 

1 sAAHHH

HH

s

1

 

 

 

 

 

 

 

 

 

 

 

1 s

 

 

 

s 1

 

 

 

 

 

 

 

A

 

 

 

 

 

 

 

 

 

 

 

 

 

v2 sHHH

HH

sw2

 

 

 

 

 

v2 sHHAH

sw2

 

 

 

 

 

 

 

 

 

 

H7

 

 

 

 

 

 

 

 

 

 

A H

 

sw3

 

 

 

 

 

 

 

 

 

 

v3 s@

 

 

 

 

sw3

 

 

 

 

 

 

 

 

 

H

 

 

 

 

 

 

 

 

 

 

 

 

 

H

H

 

 

 

 

 

 

 

 

A H

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

v3 s@ A

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

v4 s

@ A

 

 

sw4

 

 

 

 

 

 

 

 

 

 

v4 s

 

@

 

 

 

 

 

sw4

 

 

 

 

 

@@AA

 

 

 

 

 

 

 

 

 

 

 

 

@@6

 

 

 

 

 

 

 

 

 

 

@A

 

 

 

 

 

 

 

 

 

 

 

 

 

v5 s

 

 

 

@

@sw5

 

 

 

 

 

v5 s

 

G1

@Asw5

 

 

 

 

 

 

 

 

 

 

 

П1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Поскольку |П1| = 3 ≠ |V | = 5, паросочетание П1 не является совершенным.

3. Находим множества S и φ(S):

S = {v1, v3, v4, v5}, φ(S) = {w2, w5}; |S| = 4 > |φ(S)| = 2.

Так как ребро {v2, w3} инцидентно только двум вершинам, концы ребра в множества S и φ(S) не включены.

4.Метки, приписанные вершинам v1, v3, v4 и v5, понижаем на 1, а метки, приписанные вершинам w2 и w5, повышаем на 1.

a1 = 5 1 = 4, a3 = 6 1 = 5, a4 = 5 1 = 4, a5 = 6 1 = 5.

229

 

 

 

 

 

b2 = 0 + 1 = 1, b5 = 0 + 1 = 1.

 

 

 

 

 

 

1

0

0

1

 

 

 

 

 

 

0

 

 

 

 

 

0

0

0

0

0

 

 

 

 

 

 

 

 

 

 

 

 

Метки,

приписанные

4

5

2

5

4

2

5

7

7

4

3

7

4

6

 

 

 

 

 

 

 

 

 

 

остальным

вершинам,

 

 

 

 

 

 

 

 

 

 

 

 

 

5

6

4

2

3

4

6

 

 

 

 

4

5

3

5

2

3

4

 

оставляем без изменения.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5

6

2

6

5

2

3

 

 

 

5. Находим в матрице С элементы cij

= ai + bj, значение которых

равно сумме соответствующих меток.

 

 

0

1

0

0

1

 

Все уже подчеркнутые элементы удо-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4

2

5

4

2

5

 

влетворяют этому равенству. Найдем

 

7

4

3

7

4

6

 

другие элементы, для которых это ра-

 

5

4

2

3

4

6

 

 

4

3

5

2

3

4

 

венство верно и дважды подчеркнем

 

 

 

 

 

 

 

 

 

 

 

 

5

2

6

5

2

3

 

их.

6. Строим новый граф G2. Максимальное паросочетание П2 в данном графе совпадает с П1 и не является совершенным.

v

 

H

w

v

 

H

 

 

w

 

1

sA@A@HHH

s 1

 

1

s

HHH5

 

s 1

 

 

A @

HH

v2 sHHH

HH

sw2

v2 sHHAH@ sw2

H7

 

 

 

A H@

v3 s@

 

sw3

 

 

 

H

H

H

 

 

A H@

 

v3 s@ A sw3

 

 

 

 

@ A

v4 s

@

 

 

sw4

 

 

@ A

@

@6

 

v4 s @ A sw4

 

 

 

 

 

@A

v5 s

 

@

@sw5

v5 s

@Asw5

П2

 

 

G2

 

 

 

 

 

 

7.

 

 

S = {v1, v2, v3, v4, v5} = V ,

 

 

 

 

 

φ(S) = {w2, w3, w5}; |S| = 5 > |φ(S)| = 3.

8.Все метки, приписанные строкам, понижаем на 1.

Метки, приписанные вершинам w2, w3 и w5 на 1 повышаем. Метки b1 и b4 оставляем без изменения.

230