Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
элементы дискретной математики.doc
Скачиваний:
11
Добавлен:
05.09.2019
Размер:
2.19 Mб
Скачать

7. Эвристические алгоритмы

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

Алгоритмы называются эвристическими, если для поиска решения используются приближенные методы. В них применяется ограниченная тактика поиска оптимального решения, заключающаяся в том, что, используя какую-либо здравую идею, на дереве перебора выделяют поддерево, на котором ищут наилучшее решение. Поскольку ищется локальный, а не глобальный оптимум, то не гарантируется, что выбранное решение совпадает с оптимальным.

Для эвристических алгоритмов характерны следующие основные правила:

не отменяй принятых решений;

упаковывая вещи, начинай с самых громоздких предметов.

Особенности применения эвристических алгоритмов рассмотрим на примере задачи раскраски графа.

Дан граф G(X,U), =n, =m. Требуется раскрасить граф G в минимальное число цветов таким образом, чтобы никакие две смежные вершины не были раскрашены в один цвет.

7.1. Алгоритм последовательной раскраски

Алгоритм последовательной раскраски графа в минимальное число цветов имеет следующий вид.

1. Упорядочить вершины графа в порядке не возрастания степеней.

2. Положить i=0.

3. Положить i=i+1.

4. Просматривая вершины графа в порядке не возрастания степеней, окрашивать неокрашенные вершины в цвет i . Окрашиваемая в цвет i вершина не должна быть смежной с уже окрашенными в данный цвет вершинами.

5. Если все вершины графа окрашены, то перейти к п.6, иначе - к п.3.

6. Конец алгоритма.

Пример. Применим последовательный алгоритм для раскраски графа G, изображенного на рис. 7.1. Упорядочим его вершины от 1 до n.

G

9

8

Рис. 7.1. Граф G

В массиве А (рис. 7.2а) содержатся степени вершин графа G. Индекс массива соответствует номеру вершины.

В массиве В (рис. 7.2б) содержатся номера вершин графа G, упорядоченные по не возрастанию степеней.

Вершины массива В, раскрашенные 1-ой краской, отмечены в массиве С на рис. 7.2в.

Вершины массива В, раскрашенные 1-ой и 2-ой красками, находятся в массиве С на рис. 7.2г.

На рис.7.2д. в массиве С показана полная раскраска графа G.

степени вершин

4

4

3

8

3

3

3

4

4

номера вершин

графа G

А 1 2 3 4 5 6 7 8 9

а) массив степеней графа G

В

номера вершин

графа G

4

1

2

8

9

3

5

6

7

1 2 3 4 5 6 7 8 9

б) упорядочение вершин графа G по

не возрастанию степеней

1

0

0

0

0

0

0

0

0

С 1 2 3 4 5 6 7 8 9

в) раскраска вершин графа G

1-ой краской

1

2

0

0

2

0

2

2

0

С 1 2 3 4 5 6 7 8 9

г) раскраска вершин графа G

1-ой и 2-ой красками

1

2

3

3

2

3

2

2

3

С 1 2 3 4 5 6 7 8 9

д) полная раскраска вершин

графа G в три цвета

Рис. 7.2. Раскраска графа G последовательным алгоритмом

Легко видеть, что в данном алгоритме выполняются все вышеперечисленные правила. Основное из них заключается в том, что если вершина окрашена, то она уже не перекрашивается в другой цвет.