Алгоритм матричного отображения графа на булев куб

ВЕСТНИК ТОМСКОГО ГОСУДАРСТВЕННОГО УНИВЕРСИТЕТА

2011 Управление, вычислительная техника и информатика № 3

ДИСКРЕТНЫЕ ФУНКЦИИ И АВТОМАТЫ

УДК 519.7

А.Д. Закревский

АЛГОРИТМ МАТРИЧНОГО ОТОБРАЖЕНИЯ ГРАФА НА БУЛЕВ КУБ

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

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

Важной проблемой современной теории и практики автоматизированного проектирования дискретных устройств является задача энергосберегающего кодирования состояний автомата, реализуемого логической схемой. Она формулируется следующим образом. Автомат задается неориентированным графом переходов О с т вершинами. Информация об ориентации переходов при этом не учитывается, поскольку она оказывается несущественной. Требуется оптимальным образом разместить вершины графа в булевом пространстве М = {0, 1}п, размерность которого п равна целому, ближнему сверху к т, и которое можно рассматривать

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

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

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

1. Представление данных

Рассматриваемый в предлагаемом алгоритме граф переходов представляется симметричной булевой матрицей смежности Є размером т х т. Элемент этой матрицы giJ = 1, если и только если вершины і и / связаны некоторым ребром -обозначим это ребро через (і-/). Другими словами, соответствующие этим вершинам состояния автомата связаны некоторым переходом. Очевидно, что giJ =gj'.

Положим, что gi 1 = 0, поскольку переходы состояний в себя при решении рассматриваемой задачи не учитываются.

Например, показанный на рис. 1 граф переходов автомата с 11 состояниями представляется следующей матрицей смежности:

8

9

Рис. 1. Граф переходов

Є =

1 2 3 4 5 6 7 8 9 10 11

0 0 1 0 0 1 0 1 0 0 0 1

0 0 0 1 0 1 0 0 1 0 1 2

1 0 0 0 0 1 1 0 1 0 0 3

0 1 0 0 1 0 0 1 0 0 0 4

0 0 0 1 0 0 0 0 0 1 1 5

1 1 1 0 0 0 1 0 0 1 0 6

0 0 1 0 0 1 0 0 1 0 0 7

1 0 0 1 0 0 0 0 1 0 0 8

0 1 1 0 0 0 1 1 0 0 0 9

0 0 0 0 1 1 0 0 0 0 1 10

0 1 0 0 1 0 0 0 0 1 0 11

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

Два ребра графа (і-/) и (к-1), задаваемые матричными элементами giJ и gk 1, параллельны, если матрица смежности Є принимает значение 1 также на элементах gi1 и gk3. Другими словами, эти ребра параллельны, если все четыре элемента матрицы, расположенные на пересечении строк gi и gk со столбцами £ и gI, принимают значение 1.

В этом случае они принадлежат квадрату, который удобно задать выражением (і, /, к, I), в котором смежные вершины представлены соседними или крайними членами. Кроме ребер (і-/) и (к-1) в квадрат входит также пара I-------к

параллельных ребер (/, к) и (I, і) (рис. 2). , ,

т-> /їх Рис. 2. Квадрат

В данном примере (рис. 1) параллельными оказываются ребра (4-5) и (11-2), принадлежащие отмеченному

на рисунке квадрату, равно как и ребра (5-11) и (2-4). Они представляются четырьмя матричными элементами, на пересечении строк 4 и 11 со столбцами 2 и 5. Это элементы g4 2, g4 5, g¡¡2 и g¡¡ 5. Они отмечены в матрице курсивом. А квадрат в целом представляется выражением (4-5-11-2).

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

(4-5-11-2), (5-11-2-4), (11-2-4-5), (2-4-5-11), (2-11-5-4),

(11-5-4-2), (5-4-2-11), (4-2-11-5).

Структуру булева куба, на который требуется спроектировать граф переходов, представим переменной булевой матрицей В размером п на 2п, строки которой соответствуют булевым переменным хь х2, ..., хп, а столбцы - элементам булева

пространства этих переменных, т.е. вершинам булева куба. Назовем ее матрицей куба.

Перед выполнением алгоритма отображения все элементы матрицы куба имеют значение 1. Например, при п = 4 эта матрица имеет следующий начальный вид:

1 1 1 1 1 1

0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5

0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 X!

0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 х2

0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 х3

0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 х4

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 х1

В = 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 х2

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 х3

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 х4

Элементы булева пространства (вершины булева куба), соответствующие столбцам матрицы Ь/, пронумерованы и показаны сверху, а булевы переменные, соответствующие ее строкам Ьі - справа. Ребра куба представлены соответствующими парами элементов матрицы В; значение й/ говорит о том, что /-й вершине куба инцидентно ребро, ориентированное по переиенной хі. Например, в матрице отмечены полужирным четыре ребра, инцидентные вершине 0 - это ребра (0-1), (0-2), (0-4) и (0-8). При выполнении алгоритма некоторые элементы матрицы В меняют свое значение с 1 на 0, что свидетельствует об использовании ребер булева куба в ходе реализации алгоритма отображении ребер графа в булево пространство.

2. Алгоритм отображения

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

На первом шаге выбирается некоторое ребро, для которого находится параллельное ему. В рассматриваемом ниже примере из нескольких подходящих ребер всегда выбирается ребро с минимальным номером. Например, в рассматриваемом графе первыми выбираются ребро (1-3) и параллельное ему ребро (7-6). Вершины первого из них кодируются соседними кодами - различающимися значением в одной компоненте. Операцией смены значений другой компоненты из этих кодов получаются коды вершин другого ребра.

Так, вершины 1 и 3 кодируются векторами 0000 и 0001, а вершины 7 и 6 - векторами 0010 и 0011. Эти ребра образуют квадрат (1-3-7-6), куда входят также ребра (3-7) и (6-1). Таким образом, в результате этой четыре ребра графа (1-3), (3-7). (7-6) и (6-1), образующие найденный квадрат, отображаются на соответствующие ребра булева куба: (0-1), (1-3), (3-2) и (2-0). Соответственно корректируется матрица В. Отображенные ребра отмечаются в матрице Є.

Проиллюстрируем эту операцию новым значением матрицы В. Сверху матрицы В показаны вершины графа, проектируемые на вершины булева куба, пред-

ставленные столбцами матрицы. Справа показано, как из кодов вершин ребра (1-3) получаются коды вершин параллельного ему ребра (7-6) Звездочкой отмечена компонента с изменяемым значением.

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

Опишем эти операции более подробно.

Выбор отображенного ребра. Рассматривается некоторое отображенное ребро (і, /) графа, отмеченное в матрице Є . Обозначим через Ь* и Ь/ столбцы матрицы В, соответствующие кодам вершин і и / (например, Ь1 = [1100]т). Если конъюнкция этих столбцов не содержит единиц (Ь і Л Ь/ = 0), не существует свободного ребра, параллельного ребру (і, /), следовательно, надо выбрать другое из отображенных ребер. Их можно перебирать в порядке нумерации.

Нахождение параллельного ему среди свободных ребер. Обозначим через N множество незакодированных вершин, а через Я/ и Су соответствующие этим вершинам подмножества строк и столбцов матрицы Є. Допустим, что выбрано отображенное ребро (р-д). Рассмотрим в множестве Я/ некоторую строку gk, содержащую единицу в /-й компоненте = 1). Если конъюнкция векторов gi и gk принимает значение 1 в некотором столбце I из множества С/, находится свободное ребро (к-1), параллельное ребру (р-д). В противном случае рассматривается другая строка из Я^.

Кодирование вершин и отображение ребер. Коды вершин к и I получаются соответственно из кодов вершин / и і сменой значения младшей из компонент, удовлетворяющих следующему условию: одноименная компонента в векторе Ь 1 л Ь* должна быть равна единице. Из этого условия, в частности. следует, что данная компонента имеет одинаковое значение в кодах вершин / и і .

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

1 3 6 7

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

1 0000 3 0001

В = 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1

0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1

7 0011 6 0010

Шаг 2.

1 3 6 7 8 9

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

В = 0 0 1 1 0 0 1 1 1 1 1 1 1 1 1 1

1 0000 3 0001

0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1

9 0101 8 0100

Шаг 3.

В =

Шаг 4.

В =

1 3 6 7 8 9 4 2

1 1 1 1 0 0 1 1 1 1 1 1 0 0 1 1 8 0100

0 0 1 1 0 0 1 1 1 1 1 1 1 1 1 1 9 0101

0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 *

0 0 0 0 0 0 1 1 1 1 1 1 0 0 1 1 2 1101

4 1100

1 3 6 7 8 9 4 2 5 11

1 1 1 1 0 0 1 1 1 1 1 1 0 0 1 1 2 1101

0 0 1 1 0 0 1 1 1 1 1 1 1 1 1 1 4 1100

0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 *

0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 5 1110

11 1111

В результате выполнения данной цепочки на гиперкуб отобразились 13 ребер графа и все его вершины, кроме одной, с номером 10. Ее можно закодировать, рассматривая коды соседних с ней вершин 5, 6 и 11 и выбирая среди свободных (еще не использованных) кодов ближайший к ним. Таким оказывается булев вектор 0110, соседний с кодами вершин 5 и 6 - векторами 1110 и 0010. Этот выбор приводит к отображению на гиперкуб еще двух ребер - (5-10) и (6-10). Оказываются соседними коды вершин 8 и 10, хотя они не смежные, что находит отражение в конечном значении матрицы куба:

В =

1 3 6 7 8 9 10 4 2 5 11

1 1 1 1 0 0 0 1 1 1 1 1 0 0 0 1

0 0 0 1 0 0 0 1 1 1 1 1 1 1 1 1

0 0 0 0 0 1 0 1 1 1 1 1 0 0 0 0

0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0

Присвоенные вершинам графа переходов коды показаны в следующей таблице:

0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1

0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1

0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1

0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1

1 3 6 7 8 9 10 4 2 5 11

отображенные ребра отмечены на с и р . 3

5 ^ /\

8 '

9

Рис. 3. Граф переходов с отображенными ребрами

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

Остались не отображенными на булев гиперкуб четыре ребра графа: 2-6, 3-6, 7-9 и 10-11. Их веса (хэмминговы расстояния между кодами вершин) равны соответственно 4, 2, 2 и 2.

xi

Рис. 3. Результат отображения графа на булев куб

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

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

ЛИТЕРАТУРА

1. Закревский А.Д. Об оптимальном размещении графа в булевом пространстве // Вестник Томского государственного университета. Приложение. 2005. № 14. С. 13-17.

Закревский Аркадий Дмитриевич Объединенный институт проблем информатики НАН Беларуси, г. Минск

E-mail: zakr@newman.bas-net.by Поступила в редакцию 20 ноября 2011 г.