назад    Оглавление    вперед


страница - 0

Алгоритмические вопросы раскраски предфрактальных и фрактальных графов

Кононова Н.В. (knv fm@mail.ru) (1), Кочкаров Р.А. (2)

(1) Ставропольский институт экономики и управления имени О.В. Казначеева, (2) Финансовая академия при Правительстве РФ

Опишем алгоритм, позволяющий находить хроматическое число графа G и раскраску, соответствующую этому числу [1].

ШАГ 1. Положить k = 1. Найти множества вершин SjJ [G], J = 1,..., qj , максимальных k -подграфов графа G . Пусть Q = G] J = 1,..., qk }• Положить J = 1.

графа GJ = V - SJ [G]

s1 [gj

ШАГ 2. Найти максимальное независимое множество S G J

Если такое множество существует, то перейти к шагу 3. Если все такие множества уже найдены, то перейти к шагу 6.

Шаг 3. Вычислить S = SJj [g] u S1 GJ .

Шаг 4. Если S = V, то остановиться. Число k +1 есть хроматическое число графа G . Подмножества, включенные в множество S, дают требуемую раскраску. Если S Ф V, то перейти к шагу 5.

ШАГ 5. (1) Если S с S для некоторого S Е Q, то перейти к шагу 2.

(2)Если S ZD S для некоторых S Е Q , то положить Q = Q - {S} по всем таким S из Q . Положить Q = Q U {S} и перейти к шагу 2.

(3)Если не выполняется ни одно из условий (1) и (2), указанных выше, то положить Q = Q U {S} и перейти к шагу 2.

Шаг 6. Если j < qj, то положить j = j +1 и перейти к шагу 2.

Если J = qj, то положить J = 1, k = k +1, qj = числу множеств в Q и перейти к шагу 2.

Если работу алгоритма не завершать при первом выполнении условия S = V на шаге 4, то алгоритмический процесс будет продолжаться до получения раскраски в k +1 цветов, если такая раскраска существует. Следует отметить, однако, что описанный алгоритм не дает полного перечисления всех возможных раскрасок в k +1 цветов, а только порождает оптимальные независимые раскраски. Такие раскраски могут оказаться только небольшой частью всех возможных раскрасок в k + 1 цветов.

Для определения хроматического числа графа может быть использован с поразительной эффективностью очень простой метод неявного перебора, использующий дерево поиска [1]. Метод состоит в следующем.

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

(1)окрасить Vi в цвет 1.

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

Пусть k - число цветов, требуемое для вышеупомянутой раскраски. Если существует раскраска, использующая только k - 1 цветов, то все вершины, окрашенные в цвет k,


должны быть перекрашены в цвет J < к. Пусть v.* - первая вершина при заданном

упорядочении, которая была окрашена в цвет к. Поскольку (согласно (2)) она была так окрашена потому, что не могла быть окрашена в цвет J < к , то ее можно перекрасить в цвет

J < к, лишь перекрасив предварительно хотя бы одну из смежных с ней вершин. Итак, шаг

возвращения из вершины v.* можно осуществить следующим образом.

Из смежных с v.* вершин в множестве {vi,...,vi} найти последнюю, т. е. вершину с наибольшим индексом. Пусть это будет вершина vr. Если vr окрашена в цвет Jr, то перекрашивается в другой допустимый цвет с наименьшим возможным «номером» jr, таким, что j[ > Jr +1. Если jr < к, то надо продолжать последовательно перекрашивать все вершины с vr+1 до vn, применяя указанное выше правило (2) и помня о том, что цвет к использовать нельзя. Если такая процедура осуществима, то будет найдена новая лучшая раскраска, использующая меньше, чем к цветов. В противном случае, т. е. если встретится вершина, «требующая» цвет к, то можно снова сделать шаг возвращения - из такой вершины. Если J = к или нет другого допустимого цвета Jr, то можно сразу же делать шаг возвращения из вершины vr . Алгоритм заканчивает работу, когда на шаге возвращения достигается вершина v1 .

Далее предлагается последовательный метод, основанный на упорядочивании множества вершин. В этом простейшем из методов вершины вначале располагаются в порядке невозрастания их степеней. Первая вершина окрашивается в цвет 1; затем список вершин просматривается сверху вниз и в цвет 1 окрашивается всякая вершина, которая не смежна с другой, уже окрашенной в этот цвет. Потом возвращаемся к первой в списке неокрашенной вершине, окрашиваем ее в цвет 2 и снова просматриваем список вершин сверху вниз, окрашивая в цвет 2 любую неокрашенную вершину, которая не соединена ребром с другой, уже окрашенной в цвет 2 вершиной. Аналогично действуем с цветами 3, 4 и т. д., пока не будут окрашены все вершины. Число использованных цветов будет тогда приближенным значением хроматического числа графа.

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

- л (2)

с помощью двухшаговых степеней а> вершин vt, имеющих одинаковые степени

(2)

(одинаковые 1-шаговые степени), где di определяется как число маршрутов длины 2, исходящих из vt. Эти вершины могут быть размещены тогда в соответствии с величинами

(2)

степеней d\ . Если все-таки найдутся вершины, у которых совпадают и степени dt

и

степени d2, то можно вычислить трехшаговые степени d3) (определяемые аналогичным

образом) и разместить вершины с учетом степеней di(3) и т. д.

Можно действовать иначе: размещать вершины сразу в соответствии с их степенями

( 2 )(3)

di или степенями di и применять тот же самый последовательный метод раскраски.

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


Рассмотрим предфрактальный граф GL = (VL, EL), смежность старых ребер которого сохраняется [2]. Пусть GL = (VL, EL ) порожден затравкой H = (W, Q) - полный граф, у которой W = n , Q = q. Опишем принцип работы алгоритма в.

Поскольку порождающая затравка H = (W , Q) является полным графом, то для ее правильной и одновременно минимальной раскраски понадобится ровно n цветов, то есть хроматическое число %(H) = n. Отметим, что для раскраски затравки H, достаточно

последовательно окрашивать ее вершины в цвета 1,2,...,n. В начале алгоритма окрашивается подграф-затравка первого ранга z1), аналогом которой является граф G1 из

траектории G1,G2,...,GL или затравка H. Для раскраски подграф-затравки z1)

понадобится n цветов, как объяснялось ранее. Далее рассмотрим подграф-затравки второго

ранга . У каждой из них одна вершина оказалась окрашенной, так как подграф-затравка

первого ранга имеет одну общую вершину с подграф-затравкой второго ранга, в силу того,

(2)

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

(2)

сути затравка H , окрасим вершины в оставшиеся цвета 2,3,...,n . Окрасим таким же

(2)

образом все подграф-затравки второго ранга z . Далее рассматриваем подграф-затравки

s2

третьего ранга z , у каждой из них оказалось окрашенной по одной вершине. Окрашиваем

s3

подграф-затравки в соответствие с описанным раннее. Продолжая окрашивать подграф-

s3

затравки следующих рангов до L -го ранга включительно, получим правильную n -раскраску предфрактального графа Gl . Представим алгоритм 1 в рекуррентной форме, используем для этого процедуру РАСКРАСКА.

АЛГОРИТМ в1. Вход: предфрактальный граф Gl = (Vl , El ). Выход: правильная n-раскраска.

ШАГ 1. Окрасить одну из вершин подграф-затравки z1(1) в цвет 1.

ШАГ 2. Раскрасить подграф-затравку z1(1) используя процедуру РАСКРАСКА. Процедура Раскраска.

Вход: подграф затравка z).

si

Выход: n-раскраска.

ШАГ 1. Последовательно раскрасить все вершины подграф-затравки в n цвета, начиная с вновь окрашенной.

Шаг 2. Если I < L то: Используя процедуру Раскраска раскрасить подграф-затравки z1+1)

л1+1

следующего ранга, для всех S[+1 = 1,2,...,nl. ЕСЛИ I = L ТО: Закончить процедуру и вернуться.




содержание:
[стр.Введение] [стр.1] [стр.2] [стр.3]