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

Презентации лекций в одном файле

.pdf
Скачиваний:
15
Добавлен:
27.05.2024
Размер:
10.25 Mб
Скачать

Раскраска графа – алгоритм Зыкова

M1= X- X2*X3*X4={X1,X5,X6}

M2= X - X1*X3*X4*X5 ={X2,X6}

M3= X - X1*X2*X3*X5 ={X4,X6}

M4= X - X2*X4*X6={X1,X3,X5}

M5= X - X1*X2*X5*X6 ={X3,X4}

Раскрасить граф – поставить в соответствие каждой вершине графа некоторый цвет так, чтобы смежные вершины были окрашены в разные цвета.

Запишем логическое выражение: каждая вершина может быть окрашена в один из цветов (ВУМ). Минимизируем это выражение. Наименьшее количество цветов – хроматическое число графа.

(М1+М4) *М2*(М4+М5) (М3+М5) (М1+М4) (М1+М2+М3)= (М1*М2 + М2*М4) * (М5+М3*М4)= М1*М2*М5+М2*М4*М5+М1*М2*М3*М4+М2*М3*М4=

М1*М2*М5+М2*М4*М5+М2*М3*М4

1 2 3 |C2|=3 (хроматическое число графа)

Решение задачи

(М1+М4) *М2*(М4+М5) (М3+М5) (М1+М4) (М1+М2+М3)

М2*М4*М5 М2 М4

Х1 М4

Х2 М2

Х3 М4 или М5

Х4 М5

Х5 М4

Х6 М2

М5

 

X1

X4

X2

X5

X3

X6

Задача о назначении. Венгерский алгоритм.

Пусть существуют несколько заданий (Job’s) и процессоров (Processor’s). Известно время выполнения каждого задания каждым процессором.

 

Job 1

Job 2

Job 3

Job 4

Job 5

 

 

 

 

 

 

Processor 1

2

1

6

9

 

 

 

 

 

 

Processor 2

2

7

2

14

2

 

 

 

 

 

 

Processor 3

7

6

1

14

15

 

 

 

 

 

 

Processor 4

6

12

2

18

11

 

 

 

 

 

 

Processor 5

1

7

2

7

 

 

 

 

 

 

Необходимо распределить задания между процессорами так, чтобы суммарное время выполнения было минимальным.

Это задача линейного назначения.

Будем решать задачу с помощью венгерского алгоритма. Процедура 1. Получение 0 в каждой строке и столбце матрицы.

 

Job 1

Job 2

Job 3

Job 4

Job 5

MIN

 

 

 

 

 

 

 

Processor 1

2

1

6

9

- 1

 

 

 

 

 

 

 

Processor 2

2

7

2

14

2

- 2

 

 

 

 

 

 

 

Processor 3

7

6

1

14

15

- 1

 

 

 

 

 

 

 

Processor 4

6

12

2

18

11

- 2

 

 

 

 

 

 

 

Processor 5

1

7

2

7

- 1

 

 

 

 

 

 

 

Найдем минимальный элемент (MIN) в каждой строке и вычтем его из всех элементов строки.

Проверим, есть ли 0 в каждом столбце таблицы. Если нет, поступим аналогично строкам.

 

Job 1

Job 2

Job 3

Job 4

Job 5

 

 

 

 

 

 

Processor 1

1

0

5

8

 

 

 

 

 

 

Processor 2

0

5

0

12

0

 

 

 

 

 

 

Processor 3

6

5

0

13

14

 

 

 

 

 

 

Processor 4

4

10

0

16

9

 

 

 

 

 

 

Processor 5

0

6

1

6

 

 

 

 

 

 

MIN

 

 

 

- 1

 

 

 

 

 

 

 

Получилась матрица, в каждой строке и в каждом столбце

которой есть 0.

 

Job 1

Job 2

Job 3

Job 4

Job 5

 

 

 

 

 

 

Processor 1

1

0

5

8

 

 

 

 

 

 

Processor 2

0

5

0

11

0

 

 

 

 

 

 

Processor 3

6

5

0

12

14

 

 

 

 

 

 

Processor 4

4

10

0

15

9

 

 

 

 

 

 

Processor 5

0

6

0

6

 

 

 

 

 

 

Процедура 2. По нулям матрицы построим простой граф.

Простой граф: два множества вершин (X и Y) и отображение G.

 

Y1

Y2

Y3

Y4

Y5

 

 

 

 

 

 

X1

1

0

5

8

 

 

 

 

 

 

X2

0

5

0

11

0

 

 

 

 

 

 

X3

6

5

0

12

14

 

 

 

 

 

 

X4

4

10

0

15

9

 

 

 

 

 

 

X5

0

6

0

6

 

 

 

 

 

 

X1

Y1

X2

Y2

X3

Y3

X4

Y4

X5

Y5

Число дуг равно числу нулей!!!

Процедура 3. Построим максимальное паросочетание.

Паросочетание: множество дуг не имеющих общих вершин.

 

Y1

Y2

Y3

Y4

Y5

 

 

 

 

 

 

X1

1

0

5

8

 

 

 

 

 

 

X2

0

5

0

11

0

 

 

 

 

 

 

X3

6

5

0

12

14

 

 

 

 

 

 

X4

4

10

0

15

9

 

 

 

 

 

 

X5

0

6

0

6

 

 

 

 

 

 

X1

Y1

X2

Y2

X3

Y3

X4

Y4

X5

Y5

Если не все вершины Х отобразились в Y, перейдем к процедуре 4. Вспомним задачу нахождения максимального потока в транспортной сети!!!

Процедура 4. Перестановка нулей. Найдем min опору графа.

Опора: минимальное множество вершин, инцидентных всем дугам.

Из «худой»

 

 

 

 

Число вершин в

 

 

 

 

минимальной опоре

вершины идем

 

X1

Y1

 

 

 

равно числу дуг в

вперед по

 

 

 

 

 

 

 

 

максимальном

«худым» дугам,

 

 

 

 

 

 

 

 

паросочетании !!!

назад по

 

X2

Y2

 

 

 

 

«жирным» и

 

 

 

 

Если из «худой» вершины

помечаем

 

 

 

 

Х пришли в «худую» Y, то

α

X3

Y3

α

делаем инверсию дуг

вершины

 

 

 

 

 

 

индексом α.

 

 

 

 

 

 

α

X4

Y4

 

 

«Худая» вершина

 

 

 

 

 

 

 

X5

Y5

 

 

В опору войдут вершины Х не помеченные α и

 

 

 

вершины Y помеченные α.

 

 

Опора:

 

 

 

 

 

X1,X2,X5,Y3