Об одном алгоритме раскраски графа и его модификациях

А. Ю. Краснова

ОБ ОДНОМ АЛГОРИТМЕ РАСКРАСКИ ГРАФА И ЕГО МОДИФИКАЦИЯХ

Введение. При построении алгоритмов вершинной и реберной раскрасок графа будем исходить из того, что граф задается матрицей смежности, и собственно под графом будем понимать класс перестановочно подобных матриц смежности. Последнее означает, что граф задается с точностью до нумерации вершин. Так, если при некоторой нумерации вершин граф задан матрицей A, а P - матрица перестановки, задающая переход от одной нумерации вершин к другой, то «граф» - это класс матриц вида A = PAP' (штрих означает транспонирование матрицы), где P пробегает все множество перестановочных матриц. Каждую конкретную матрицу данного класса будем называть представителем графа. Каждый представитель графа однозначно определяет граф [1].

Одно из определений графа сводится к определению его как двух взаимосвязанных множеств: множества вершин V = {vi,...,vn} и подмножества R декартова произведения первого множества на себя, т. е. R С V х V [2]. По сути R - это бинарное отношение на множестве V, а элементы множества R - упорядоченные пары (vi,vj), где i,j Є {1,. ..,n}. Обычное обозначение графа - G(V, R). Вершины vi и vj называются смежными, если пара (vi, vj) Є R, и несмежными - в противном случае. Обозначим через U декартово произведение V х V, т. е. положим U = V х V. Здесь U можно записать в виде квадратной таблицы, при этом на пересечении i-й строки и j-го столбца будет находиться пара (vi,vj). Введем в рассмотрение функцию множества

Тогда f (U) будет равно некоторой (0,1)-матрице A, которую называют матрицей смежности графа. Нетрудно показать, что при изменении нумерации вершин, определяемом матрицей перестановки P, матрица A перейдет в матрицу A, связанную с A соотношением A = PAP'. Используя привычные матричные обозначения A = (aij), можно сказать, что элемент aij матрицы A равен 1, если (vi, Vj) G R, и равен нулю - в противном случае [3].

В теории графов особое место занимает случай симметричного бинарного отношения R, когда из (vi,vj) G R следует, что (vj,Vi) G R. Здесь матрица смежности графа будет симметричной (0,1)-матрицей.

Приведенному выше определению графа можно придать геометрическую интерпретацию, а именно, каждому элементу множества V (вершине) можно сопоставить точку на плоскости, а упорядоченной паре (vi,vj) G R - направленный отрезок (прямолинейный или криволинейный), идущий из i-й вершины в j-тую вершину. Такой отрезок называют дугой. Дугу, идущую из вершины в себя, т. е. соответствующую паре (vi,vi), называют петлей. Двум упорядоченным парам (vi,vj), (vj,vi) G R обычно

Краснова Александра Юрьевна — аспирант кафедры высшей математики факультета прикладной математики—процессов управления Санкт-Петербургского государственного университета. По теме статьи имеет 5 публикаций. Научный руководитель: кандидат физико-математических наук, доцент Г. М. Хитров. Научные направления: дискретная математика, теория графов. E-mail: alikzan@mail.ru.

© А. Ю. Краснова, 2008

если (vi, vj) Є R; если (vi, vj) Є R.

сопоставляют одну неупорядоченную пару ], а двум противоположно направленным дугам, соединяющим одни и те же вершины, - один (ненаправленный) отрезок, который называют ребром [4]. Граф без петель, вершины которого могут быть соединены только ребрами, называется обыкновенным. Матрица смежности обыкновенного графа - квадратная симметричная (0,1)-матрица с нулевой диагональю. Данную выше геометрическую интерпретацию графа обычно и называют графом, поскольку это определение исторически появилось раньше. Потому основными терминами теории графов являются вершина, ребро, дуга, петля и производные от них. В настоящей статье рассматриваются только обыкновенные графы, и дальше под словом граф понимается обыкновенный граф.

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

Определение 1. Вершина гі и ребро х^ инцидентны, если вершина гі принадлежит ребру ху .

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

Определение 2. Ребра хі и х^ называются смежными, если они инцидентны одной и той же вершине.

Определение 2 обратимо в том смысле, что две вершины гі и г^ называются смежными, если они инцидентны одному и тому же ребру [4]. Это определение смежности вершин не входит в противоречие с данным ранее.

Граф с множеством вершин V и множеством ребер X записывается как О(У, X).

Связь между множествами V и X часто записывают с помощью матрицы инциден-ций графа. Матрица В инциденций графа О(У, X) с элементами Ьіу - прямоугольная (0,1)-матрица размерности (п х т), где п равно мощности множества вершин V, а т -мощности множества ребер X. Номера строк этой матрицы совпадают с номерами вершин, а номера столбцов - с номерами ребер. Элемент bij матрицы В равен 1, если вершина гі и ребро х^ инцидентны, и нулю - в противном случае. К тому же матрица В не имеет одинаковых столбцов, поскольку у обыкновенного графа нет кратных ребер.

Определение 3. Вершинной раскраской графа называется разбиение множества вершин V графа О^^) на непересекающиеся непустые подмножества вершин V (ЦІ 1=1 V = V) таким образом, что вершины, принадлежащие одному подмножеству, являются несмежными.

Вершины, принадлежащие одному подмножеству, можно считать окрашенными в один цвет - отсюда и «вершинная раскраска графа». Минимальное число цветов, в которые можно раскрасить вершины графа, называется хроматическим числом графа [4]. Определение хроматического числа графа является трудной задачей теории графов.

Определение 4. Реберной раскраской графа называется разбиение множества ребер X графа О(У, X) на непересекающиеся непустые подмножества ребер Xj (и|=1 Xj = X) таким образом, что ребра, принадлежащие одному подмножеству, являются несмежными.

Как и в случае с вершинной раскраской, при реберной раскраске интересуются в первую очередь раскраской в минимальное число цветов.

При построении алгоритмов вершинной и реберной раскрасок графа G(V,X) естественно отталкиваться от одной и той же матрицы инциденций графа. Во-первых, потому, что в матрице инциденций вершины и ребра фигурируют равноправным образом. Во-вторых, при работе с матрицами можно пользоваться компьютером и программы для такой работы могут быть написаны в среде Matlab, специально для этого приспособленной.

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

Определение 5 [1]. Квадратная матрица A порядка (размерности) n ^ 2 называется разложимой, если существует такая матрица перестановки P, что матрица A = PAP' имеет вид

где A11 и A22 - квадратные матрицы порядков k и (n — k) соответственно, которые будем называть диагональными блоками.

Если мы имеем дело с симметричными матрицами, то в определении 5 матрицу-блок A12 нужно положить равной нулю.

Определение 6 [5]. Квадратная матрица A порядка n ^ 2 называется неразложимой, если она не является разложимой.

Замечание1. Определения 5 и 6 даны для матриц размерности n ^ 2. Случаи матриц размерности n = 1 будут оговариваться особо.

Определение 7 [1]. Квадратная матрица A порядка n ^ 2 называется сильно разложимой, если существует такая матрица перестановки P, что матрица Ai = PAP' имеет вид

где квадратные диагональные блоки Ац,...,А]~к являются либо неразложимыми матрицами порядков, больших или равных двум, либо матрицами (числами) порядка единица.

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

A11 О

О A22

О

О

V О О ••• Akk)

Исследование графа обычно сводится к изучению его компонент. В анализируемом случае раскраски графа (вершинная и реберная) сводятся к раскраскам его компонент. Предположим, что матрица перестановки P приводит исходную матрицу смежности A к виду (1), где матрицы A11,..., Akk имеют размерности ni,...,nk соответственно. Тогда можно сказать, что та же самая матрица P производит разбиение множества вершин V на непересекающиеся подмножества V(j) (Uk=i V(j) = V) мощностей ni, ...,nk соответственно. Вершинная раскраска исходного графа сводится теперь к разбиению вершин каждого множества V(j) на непересекающиеся подмножества несмежных вершин Vi(j),..., Vrj), суммарная мощность которых равна nj (j = 1,..., к). В качестве подмножества вершин, окрашенных в один цвет, можно теперь взять подмножество

Vi = U k= _i Vj, при этом следует иметь в виду, что Vj = 0 при i > rj. Из изложенного выше следует, что хроматическое число графа равно максимальному хроматическому числу его компонент и при создании алгоритмов раскраски можно ограничиться случаем однокомпонентного графа с неразложимой матрицей смежности размерности n ^ 2.

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

Определение 8 [5]. Неотрицательная неразложимая матрица A называется примитивной, если существует такое натуральное k, что Ak > 0.

Определение 9 [5]. Неразложимая матрица A называется импримитивной, если существует такая матрица перестановки P, что матрица A = PAP' имеет вид

(штрих здесь также означает транспонирование).

Матрица Р, приводящая матрицу смежности А к виду (2), по сути и производит вершинную раскраску соответствующего графа, т. е. осуществляет разбиениеемножества

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

Замечание2. Покомпонентное раскрашивание дополнительного графа дает один из возможных подходов к решению такой трудной задачи теории графов как отыскание клик заданной размерности.

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

( О А12 О

О О А23

О О \

О О

Ai

ООО \Asl О О

О -As — 1 jS

О О /

где по диагонали стоят квадратные нулевые блоки.

Для симметричных импримитивных матриц А матрица А

вершин V на непересекающиеся подмножества V(1) и V(2) таких, что V(1) U V(2) = V.

Утверждение 1. Вершины VI и будут смежными тогда и только тогда, когда строка, являющаяся адамаровым (поэлементным) произведением г-й и у-й строк матрицы инциденций В, будет содержать одну единицу, а все остальные элементы этой строки будут нулями.

Доказательство. Из определения смежности вершин следует, что они инцидентны одному и только одному ребру (рассматриваются графы без кратных ребер). Поэтому при адамаровом произведении г-й и у-й строк матрицы инциденций В можно получить строку только с одной единицей - случай, когда вершины VI и смежные, или чисто нулевую строку, когда вершины VI и несмежные.

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

Из доказательства утверждения 1 вытекает также

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

Утверждение 3. Вершины Vi1,..., го^ будут попарно несмежными тогда и только тогда, когда сумма *1-й, ..., ги-й строк матрицы В будет (0,1)-строкой.

Доказательство. Необходимость. Пусть вершины у^1 ,...,у^к - попарно несмежные. Рассмотрим подматрицу матрицы В, образованную строками с номерами %1,...,%и. Каждая столбцовая сумма этой (0,1)-подматрицы равна либо нулю, либо единице. Если бы какая-нибудь столбцовая сумма равнялась бы двум (максимально возможная сумма), то это означало бы, что среди вершин у^1,..., у^к имеются, по крайней мере, две смежные вершины. Но это невозможно. Следовательно, все столбцовые суммы подматрицы равны либо нулю, либо единице, это означает, что сумма строк рассматриваемой подматрицы является (0,1)-строкой.

Достаточность. Пусть сумма г1-й, ..., ги-й строк матрицы В есть (0,1)-строка. Отсюда следует, что все столбцовые суммы подматрицы матрицы В, образованной строками с номерами г1,..., ги, равны либо нулю, либо единице. Последнее и означает, что вершины у^1,..., г01к попарно несмежны.

Утверждение 4. Пусть вершины Vi1,...,у^к попарно несмежные; вершина у^к+1 будет несмежной с предыдущими вершинами тогда и только тогда, когда адамарово произведение ги+1-й строки со строкой, равной сумме строк с номерами г1,..., ги, будет нулевой строкой.

Доказательство. Действительно, если бы строка, равная указанному адамаро-ву произведению, содержала бы единицу, то эта единица могла появиться в результате адамарова произведения некоторой г^-й строки на ги+1-тую строку. Последнее означало бы, что вершины г016 и ^+1 смежные при некотором у € {1, . ..,к} в противоречие с условием утверждения 4.

Замечание4. При формулировании утверждений 1-4 были использованы две бинарные операции (сложение и умножение). Тем не менее их достаточно просто переформулировать с использованием лишь одной бинарной операции, но тем самым мы выйдем за рамки (0,1)-матриц.

Утверждение 5. Матрица А = ВВ' — влад(ВВ'), где влад(ВВ') - диагональная матрица, совпадающая с диагональю матрицы ВВ', будет матрицей смежности обыкновенного графа, для которого матрица В является матрицей инциденций.

Доказательство вытекает из определения произведения матриц и утверждений 1 и 2.

Сформулируем теперь утверждения для ребер, аналогичные утверждениям 1-4 для вершин.

Утверждение 1’. Ребра х; и х' будут смежными тогда и только тогда, когда столбец, являющийся адамаровым произведением г-го и і-го столбцов матрицы инциденций

В, будет (0,1)-столбцом с одной единицей.

Утверждение 2’. Ребра хі и х' будут несмежными тогда и только тогда, когда столбец, являющийся адамаровым произведением і-го и і-го столбцов матрицы инци-денций В, будет нулевым столбцом.

Утверждение 3’. Ребра хі1 ,...,хік будут попарно несмежными тогда и только тогда, когда сумма іі-го, ..., ік-го столбцов матрицы В будет (0,1)-столбцом.

Утверждение 4’. Пусть ребра хі1,..., хік — попарно несмежные; ребро хік+1 будет несмежным с предыдущими ребрами тогда и только тогда, когда адамарово произведение ік+1-го столбца со столбцом, равным сумме столбцов с номерами і1,...,ік, будет нулевым столбцом.

Доказательства утверждений 1’—4’ аналогично доказательствам утверждений 1-4.

Утверждение 6. Матрица В = В'В — 2Е будет матрицей смежности так называемого реберного графа, построенного по графу, заданному матрицей инциденций В.

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

Перейдем теперь к описанию алгоритма вершинной раскраски обыкновенного графа с примитивной матрицей смежности порядка п ^ 2.

Алгоритмы вершинной раскраски графа. Предлагаемый алгоритм раскраски вершин графа основан на последовательном переборе строк матрицы инциденций с целью разбиения множества вершин графа на непересекающиеся подмножества попарно несмежных вершин. Данные подмножества будем обозначать Уі,...,Уг. При этом = V и V' ^ Мк = 0 при і = к. Построение подмножеств проводим последовательно: пока не будет выделено подмножество V;, построение подмножества ^+1 не начинаем. Перебор заканчиваем при выполнении условия и Уг = V.

Итак, алгоритм последовательного раскрашивания вершин графа состоит в следующем.

Шаг 1. Пусть граф задан матрицей смежности А. По матрице А строим матрицу инциденций В и формируем «расширенную» матрицу инциденций. Для этого слева к матрице В приписываем столбец I = («і,...,уп)г. Теперь под словами «строка расширенной матрицы инциденций», которую также обозначим через В, будем понимать строку с элементом в первом столбце. Элементы первого столбца в операциях сложения и умножения строк подматрицы не участвуют. о

Шаг 2. Организуем цикл по і = 1, г при выполнении условия Уг Уг = V. Начинаем строить подмножество V;. Пусть і = 1.

2.1. Для этого фиксируем первую строку подматрицы В. Помещаем номер фиксированной строки в множество V;.

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

a). В случае, если полученная фиксированная строка содержит хотя бы один элемент, равный единице, берем следующую строку.

b). В случае, если полученная фиксированная строка будет нулевой, номер прибавляемой строки (соответствующей несмежной вершине) помещаем в множество V;,

а саму строку удаляем из подматрицы и выбираем следующую строку. При этом фиксированная строка имеет уже новое значение, полученное в результате суммирования строк с номерами, принадлежащими построенному подмножеству V;.

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

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

Выпишем номера вершин в том порядке, как они появляются в множестве Vі, для всех множеств V, (і = 1,..., г). Получим столбец I = РІ, сравнение которого со столбцом I позволяет однозначно определить матрицу перестановки Р. Умножая исходную матрицу В слева на матрицу Р, устанавливаем матрицу инциденций Ві (Ві = РВ). По матрице Ві построим матрицу смежности Аі (Аі = ВгВ[ — йіад(ВіВ'і)), и разобьем ее на блоки горизонтальными и вертикальными полосами размерностей 1^1 (і = 1,...,г). Диагональные блоки в матрице смежностей Аі будут состоять из нулей, поскольку вершины, входящие в множество V (і = 1,...,г), являются несмежными.

Число г множеств V, при использовании предлагаемого алгоритма вершинной раскраски, вообще говоря, зависит от первоначальной нумерации вершин. Чтобы уменьшить эту зависимость, а заодно и число г, будем применять этот алгоритм некоторое число раз, меняя единообразным способом исходную нумерацию вершин. Данную операцию изменения нумерации вершин будем называть перемешиванием. Число перемешиваний (обозначим его через Н) задается произвольным образом. Операция же перемешивания состоит в следующем: в матрице Ві переставляем строки с помощью матрицы Q, где Q — матрица с единицами вдоль побочной диагонали. Таким образом, обозначая полученную матрицу через Вз, имеем Вз = QBІ. В результате работы процедуры будут найдены Н возможных раскрасок в гі, г2, ..., гн цветов.

Определение 10. К-оптимальностью (обозначим через Kc.pt) будем называть наименьшее число красок в возможной раскраске, имеющей место при Н повторений процедуры перемешивания вершин и последующего раскрашивания полученной матрицы инциденций, т. е. К0^ = тіп{г,гі,...,гн}. При этом раскраску, соответствующую Кор^, будем называть К-оптимальной раскраской графа.

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

Ша,г 1. Пусть граф задан матрицей смежности А. По ней строим матрицу инциден-ций В. Применяя к матрице В алгоритм последовательного раскрашивания вершин, получаем раскраску в г цветов и матрицу перестановок Ро такую, что Ві = РоВ.

Ша,г 2. Задаем число перемешиваний Н.

Ша,г 3. Выполняем Н итераций процедуры перемешивания. При этом полагаем, что В(0) = РоВ и і(0) = РоІ.

Тогда к-тая итерация будет происходить так:

1. Строим матрицу инциденций В(к) = QB(k і).

2. Применяем к матрице В(к) алгоритм последовательного раскрашивания вершин,

~ т-,

причем для построения «расширенной» матрицы инциденций Вз приписываем слева к ней столбец І(к) = QI(k і). Получаем раскраску в гк цветов и матрицу перестановок Рк такую, что В(к) = РкВ(к). При этом І(к) = РкіЗк).

В результате итеративного применения процедуры перемешивания будет получено Н возможных раскрасок в г1,...,гн цветов. В данном случае Кор1; = тіп{г, г1,...,гн}, и соответствующая такому числу красок раскраска будет оптимальной раскраской графа, а матрица перестановок будет иметь вид Р = Р„^Рт-1 ...P2QP1QP при

Kopt = гт.

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

Замечание 6. Если в процессе раскраски получаем г = 2, то это означает, что граф двудольный и его матрица смежности является импримитивной с индексом импримитивности, равным двум. Тем самым алгоритм раскраски одновременно и алгоритм построения канонического вида импримитивной матрицы смежности.

Пример практического использования алгоритма. Продемонстрируем работу алгоритма для обыкновенного графа с примитивной матрицей смежности. Исходная матрица смежности А и соответствующая ей матрица инциденций В выглядят следующим образом:

А

В

/1111110000000000000000000000000^ 0000001111111000000000000000000 1000001000000111110000000000000 0100000000000100001111100000000 0010000100000010001000011000000 0001000010000001000100010110000 0000100001000000000000000001100 0000000000100000000010001101010 0000010000010000100001000000011 \0000000000001000010000100010101/

Шаг 1. Применим к матрице В алгоритм последовательного раскрашивания вершин графа. Для начала определим «расширенную» матрицу инциденций

/0011111010\

0010111111

1101110011

1010110111

1111010100

1111100101

1100000101

0101111010

1111000101

0111011010

В=

/ 11111110000000000000000000000000 \ 20000001111111000000000000000000 31000001000000111110000000000000 40100000000000100001111100000000 50010000100000010001000011000000 60001000010000001000100010110000 70000100001000000000000000001100 80000000000100000000010001101010 90000010000010000100001000000011 \100000000000001000010000100010101/

Строим множество Vl. Фиксируем первую строку с номером 1, V! = {1}. Начинаем перебор строк подматрицы для поиска вершин, несмежных с вершиной 1. Проверяем строку с номером 2. Для этого поэлементно умножаем фиксированную строку на строку 2. Произведением данных строк будет нулевая строка. Тогда вершину с номером 2 помещаем в подмножество V1, т. е. Vl = {1, 2}. К фиксированной строке прибавляем строку с номером 2, а последнюю удаляем из подматрицы:

в

/ 11111111111111000000000000000000 \ 31000001000000111110000000000000 40100000000000100001111100000000 50010000100000010001000011000000 60001000010000001000100010110000 70000100001000000000000000001100 80000000000100000000010001101010 90000010000010000100001000000011 \100000000000001000010000100010101/

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

Vl = {1, 2}. Удаляем фиксированную строку и переходим к построению подмножества

V2:

/ 31000001000000111110000000000000 \ 40100000000000100001111100000000 50010000100000010001000011000000 60001000010000001000100010110000 70000100001000000000000000001100 80000000000100000000010001101010 90000010000010000100001000000011 \100000000000001000010000100010101/

В этой подматрице фиксируем первую строку, а соответствующий ей номер помещаем в подмножество V2. Таким образом, V = {3}. Осуществляем последовательную проверку. Произведение строки 1 с остальными строками дает нулевую строку только в единственном случае: при умножении на строку 7. Тогда = {3, 7}, а строки, соответствующие этим номерам, удаляем из подматрицы:

/ 40100000000000100001111100000000 \ 50010000100000010001000011000000 60001000010000001000100010110000 80000000000100000000010001101010 90000010000010000100001000000011 \100000000000001000010000100010101/

Продолжая такие рассуждения, получаем следующие подмножества: У = {4}, У4 = {5, 9}, У5 = {6}, Уз = {8,10}. При этом матрица перестановок Р0 и матрица Вг будут иметь вид

Р

1000000000

0100000000

0010000000

0000001000

0001000000

0000100000

0000000010

0000010000

0000000100

\0000000001/

в*

/1111110000000000000000000000000\ 0000001111111000000000000000000 1000001000000111110000000000000 0000100001000000000000000001100 0100000000000100001111100000000 0010000100000010001000011000000 0000010000010000100001000000011 0001000010000001000100010110000 0000000000100000000010001101010 \0000000000001000010000100010101/

Шаг 2. Пусть число перемешиваний Н = 2.

Шаг 3. Полагаем, что В(0) = Вг и /(0) = /. Проводим первую итерацию процедуры перемешивания.

1. Определяем матрицу В(1) = QB(0) = QP0B, т. е.

/0000000000001000010000100010101\ 0000000000100000000010001101010 0001000010000001000100010110000 0000010000010000100001000000011 в(1) = 0010000100000010001000011000000 Вя = 0100000000000100001111100000000 • 0000100001000000000000000001100 1000001000000111110000000000000 0000001111111000000000000000000 \1111110000000000000000000000000/

2. Применяем алгоритм последовательного раскрашивания вершин графа к матрице В(1), повторяя действия шага 1 данного примера. Для построения «расширенной» матрицы инциденций В(1) приписываем слева к матрице В(1) столбец /^ = Q/(0) = QPo/, а в данном случае /8 = (10, 8, 6, 9, 5,4, 7, 3, 2,1)*:

/10000000000000100001000010001010Л 80000000000100000000010001101010 60001000010000001000100010110000 90000010000010000100001000000011 в(1) = 50010000100000010001000011000000

В° = 40100000000000100001111100000000 •

70000100001000000000000000001100 31000001000000111110000000000000 20000001111111000000000000000000 \ 11111110000000000000000000000000 /

На выходе получим раскраску графа в Г1 = 5 цвета. При этом независимые подмножества будут иметь такой вид: У1 = {10, 8,1}, У = {6, 7, 9}, Уз = {5}, У4 = {4, 2}, У5 = {3}, а матрица перестановок

P

1 —

/1000000000\ 0100000000 0000000001 0010000000 0000001000 0001000000 0000100000 0000010000 0000000010 \0000000100/

На второй итерации процедуры перемешивания матрица B.

QB,

QPoB, т. е.

B

{ 31000001000000111110000000000000 \ 20000001111111000000000000000000 40100000000000100001111100000000 50010000100000010001000011000000 90000010000010000100001000000011 70000100001000000000000000001100 60001000010000001000100010110000 11111110000000000000000000000000 80000000000100000000010001101010 \100000000000001000010000100010101/

После применения алгоритма последовательного раскрашивания имеем раскраску в Г2 =5 цвета. Тогда Kopt = min{r, ri,r2} = (6, 5, 5) = 5, и любая соответствующая этому числу красок раскраска будет K-оптимальной раскраской графа. Возьмем в качестве ответа раскраску, полученную на последнем шаге: V1 = {3, 7},V = {2, 4},V = {5, 9}, V4 = {6}, V5 = {1, 8,10}. В таком случае матрица перестановок будет выглядеть следующим образом: P = P2QP1QP при Kopt = r2, а искомая матрица А = PAP' будет иметь вид

/0011111101\

0010000111 1100111011 1000111111 1011001110 1011000111 1011100111 1101111000 0111111000 \1111011000/

При применении к данной матрице одного из точных алгоритмов раскраски [3], гарантирующего нахождение оптимальной раскраски и истинного значения хроматического числа графа, также была получена раскраска в 5 цветов. Это, конечно, не доказывает оптимальность алгоритма, но, по крайней мере, дает надежду на то, что он может таковым являться. Отметим, что при вычислении раскраски графа данного примера алгоритмом, основанным на рассмотрении максимальных r-подграфов [3], скорость выполнения операции оказалась существенно меньше.

А

Модификации алгоритма раскраски графа. Нетрудно заметить, что, согласно утверждениям 1 ’—4’, при последовательном переборе столбов матрицы инциденций и выделении г подмножеств попарно несмежных ребер графа получим одну из возможных реберных раскрасок графа. Тогда алгоритм последовательного раскрашивания вершин графа, примененный к транспонированной матрице инциденций В, даст алгоритм реберной раскраски графа.

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

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

Определение 11. Реберным графом О*, построенным по графу О, называют граф, каждой вершине которого сопоставлено ребро графа О, и две вершины графа О* смежны тогда и только тогда, когда смежны соответствующие ребра графа О.

Таким образом, по графу О можно легко построить граф О* , причем каждое ребро графа О станет вершиной графа О*, а каждая вершина графа О - в зависимости от ее степени - некоторым количеством ребер графа О*. Как и любой граф, реберный однозначно задается матрицей смежности В. Согласно утверждению 6, матрицу смежности графа О* можно определить следующим образом: В = В'В — Сіад(В'В).

В таком случае алгоритм нахождения реберной раскраски графа О* состоит в следующем.

Ша,г 1. У исходного графа О, заданного матрицей смежности А, определяем матрицу инциденций В.

Шаг 2. По матрице инциденций В строим матрицу смежности В реберного графа О*: В = В'В — Сіад(В'В).

Ша,г 3. Используя матрицу смежности В, находим матрицу инциденций реберного графа, обозначим ее через В.

Ша,г 4. Применяем к построенной матрице В описанный ранее алгоритм последовательного раскрашивания вершин графа. Ясно, что в данном случае под множеством

V понимается множество вершин реберного графа О*, которое, в свою очередь, является множеством ребер графа О. Переходя к графу О, получаем одну из возможных реберных раскрасок графа.

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

Заключение. Заметим, что использование матриц инциденций для решения задачи раскраски графа с вычислительной точки зрения предпочтительнее, поскольку максимально верхняя граница перебора будет п(п — 1)/2.

Поскольку предлагаемые методы раскраски основаны на работе с матрицами, то в качестве инструмента для автоматизации алгоритма раскраски графа была использована система МаЙаЪ. Было проведено большое количество экспериментов по программам предлагаемых алгоритмов раскраски графа. Для исследований был использован пакет программ <^егОпе» [6], который позволяет генерировать матрицы смежности графов до 35-го порядка и устанавливать их нормальную форму.

При определении вершинной раскраски графа было замечено, что число красок, полученных в результате работы алгоритма К-оптимальной раскраски, удовлетворяют следующим неравенствам: г ^ г1 ^ ••• ^ гн. При рассмотрении реберной раскраски

расчеты показали, что минимальное число красок, получаемых первым и вторым способами, одинаково. Это и позволило сделать вывод об эффективности и оптимальности метода.

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

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

Автор благодарит профессора Харьковского политехнического института С. П. Игли-на, предоставившего пример для проверки работы алгоритма.

Summary

Krasnova A. Ju. About one coloring algorithm of graph and its modifications.

A simple algorithm for determining vertex coloring of the graph is presented. This algorithm is based on sequential detachment of a nonempty subset of a vertex set. All operations of the algorithm are expressed in terms of the incidence matrix of a graph. Several statements which necessary to insure the propriety of the algorithm are proven. The procedure of mixing which allow to approach the number of color to the chromatic one is also presented. Two modification of the suggested algorithm give edge coloring of a graph. These modifications let be sure in algorithm efficiency and its optimality. The application of the algorithm to the graph with a primitive adjacency matrix is shown.

Key words: graph, adjacency matrix, incidence matrix, vertex coloring of a graph, edge of a graph.

Литература

1. Хитров Г. М. Об определении разложимой матрицы и ее нормальной формы // Вестн. С.-Петерб. ун-та. — Сер. 10: Прикладная математика, информатика, процессы управления. — 2006. — Вып. 3. - C. 85-91.

2. Савицкая Д. В. Алгоритм построения нормальной формы квадратной (0,1)-матрицы // Труды III науч. конференции «Проектирование инженерных и научных приложений в среде MATLAB». — СПб., 2008. — C. 346—357.

3. Кристофидес Н. Теория графов: Алгоритмический подход / Пер. с англ. Э. В. Вершкова и И. В. Коновальцева; Под ред. Г. П. Гаврилова. — М.: Мир, 1978. — 432 с.

4. Харари Ф. Теория графов / Пер. с англ. и предисл. В. П. Козырева; Под ред. Г. П. Гаврилова. — Изд. 2-е. — М.: Едиториал УРСС, 2003. — 300 с.

5. Гантмахер Ф. Р. Теория матриц. — М.: Наука, 1966. — 576 с.

6. ГрафоMann — URL http://www.apmath.spbu.ru/grafomann/.

Статья рекомендована к печати проф. А. М. Камачкиным.

Статья принята к печати 29 апреля 2008 г.