logo search
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.

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