Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1 Общее понятие о графах.docx
Скачиваний:
28
Добавлен:
12.09.2019
Размер:
101 Кб
Скачать

3.6 Алгоритм неявного перебора

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

Предположим, что множество вершин как-то упорядочено и xi — i-я вершина этого множества. Тогда первоначальная допустимая раскраска может быть получена так:

  1. Окрасить xi в цвет 1.

  2. Каждую из оставшихся вершин окрашивать последовательно: вершина xi окрашивается в цвет с наименьшим возможным «номером» (т. е. выбираемый цвет должен быть первым в данном упорядочении цветом, не использованным при окраске какой-либо вершины, смежной xi).

Данный алгоритм можно ускорить, используя следующие замечания:

  1. При любом упорядочении вершин допустимые цвета j для вершины xi удовлетворяют условию j≤i.

  2. С вычислительной точки зрения выгодно размещать вершины так, чтобы первые вершины образовывали максимальную клику графа. Тогда все вершины, входящие в эту клику будут окрашены в цвет 1 и алгоритм может закончить работу раньше.

3.7 Алгоритм прямого неявного перебора

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

  1. окрасить v1 в цвет 1;

  2. каждую из оставшихся вершин окрашивать последовательно в соответствии с заданным упорядочением: вершина vi окрашивается в цвет с наименьшим возможным "номером" (т.е. выбираемый цвет должен быть первым в данном упорядочении цветом, не использованным при окраске какой-либо вершины, смежной с vi).

Опишем последующие шаги алгоритма согласно монографии.

Пусть q - число цветов, требуемое для вышеупомянутой раскраски. Если существует раскраска, использующая только q-1 цветов, то все вершины, окрашенные в цвет q, должны быть перекрашены в цвет j<q. Пусть vi* - первая вершина при заданном упорядочении, которая была окрашена в цвет q. Поскольку она была так окрашена потому, что не могла быть окрашена в цвет j<q, то ее можно перекрасить в цвет j. Итак, шаг возвращения из вершины vi* можно осуществить следующим образом. Из смежных с vi* вершин в множестве {x1, x2, ..., xi*-1} найти последнюю (при заданном упорядочении), т.е. вершину с наибольшим индексом. Пусть это будет вершина xk. Если xk окрашена в цвет jk, то xk перекрашивается в другой допустимый цвет с наименьшим возможным "номером" jk', таким, что jk' >= jk+1.

Если jk'<q, то надо продолжать последовательно перекрашивать все вершины с xk+1 до xn, применяя указанное выше правило 2 и помня о том, что цвет q использовать нельзя.

Если такая процедура осуществима, то будет найдена новая лучшая раскраска, использующая меньше, чем q цветов. В противном случае, т.е. если встретится вершина, "требующая" цвет q, то можно снова сделать шаг возвращения - из такой вершины.

Если jk'=q или нет другого допустимого цвета jk', то можно сразу же делать шаг возвращения из вершины xk.

Алгоритм заканчивает работу, когда на шаге возвращения достигается вершина x1.

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