Научная статья на тему 'Программирование вычислений в многомерном булевом пространстве'

Программирование вычислений в многомерном булевом пространстве Текст научной статьи по специальности «Математика»

CC BY
851
101
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
БУЛЕВО ПРОСТРАНСТВО / КОМБИНАТОРНЫЕ ЗАДАЧИ / НАБОР МАКРООПЕРАЦИЙ / ОПЕРАЦИИ НАД СОСЕДНИМИ ЭЛЕМЕНТАМИ / COMPOSITION (DECOMPOSITION) OF BOOLEAN FUNCTIONS / A SET OF MANIPULATIONS / PARTIALLY DETERMINED BOOLEAN FUNCTIONS

Аннотация научной статьи по математике, автор научной работы — Закревский Аркадий Дмитриевич

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

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Manipulations on Large Variables Boolean Functions

A set of manipulations on Boolean functions is suggested. Boolean function is represented by Boolean vector with 2n components. Using these manipulations simplifies determination of monotonous property of partially determined Boolean functions and decision of composition (decomposition) problems.

Текст научной работы на тему «Программирование вычислений в многомерном булевом пространстве»

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

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

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

УДК 519.7

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

ПРОГРАММИРОВАНИЕ ВЫЧИСЛЕНИЙ В МНОГОМЕРНОМ БУЛЕВОМ ПРОСТРАНСТВЕ1

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

Ключевые слова: булево пространство, комбинаторные задачи, набор макроопераций, операции над соседними элементами.

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

Более приемлемым с точки зрения программиста является представление булева пространства размерности п в виде булева 2"-вектора, т. е. вектора с 2" компонентами, соответствующими элементам пространства и пронумерованными стандартным образом, начиная с нуля: компоненте с номером к соответствует элемент пространства, представляющий собой п-компонентный булев вектор, задающий двоичный код номера к. Приписывая этим компонентам значения из множества {0, 1}, можно задать любую булеву функцию от п переменных. Например, булев вектор f = 10000000 00000000 00001000 00000001 10000000 00000000 00110000 00000001 определяет некоторую булеву функцию / шести переменных ХЬ х2, х3, х4, х5, х6, принимающую значение 1 на следующих наборах их значений:

000000, 010100, 011111, 100000, 110010, 1100011, 111111.

1 Работа была частично поддержана Белорусским республиканским фондом фундаментальных исследований (Проект Ф07МС-034).

Рис. 1. Шестимерный куб

Для удобства визуального восприятия вектор f разбит на восемь фрагментов, соответствующих интервалам булева пространства с внутренними переменными x4, x5, x6 и представляющих коэффициенты дизъюнктивного шенноновского разложения функции f по переменным xi, x2, x3.

Булевы 2"-векторы служат основными объектами преобразований, проводимых при решении разнообразных логико-комбинаторных задач, которые возникают при проектировании дискретных устройств и разработке систем искусственного интеллекта [1]. С целью повышения эффективности их программирования в данной статье предлагается базисный набор макроопераций над такими векторами, названный POBS (Parallel Operations in Boolean Space).

Как показывает опыт, этот набор оказывается весьма эффективным, позволяя быстро оперировать на современной персоналке с длинными булевыми векторами, представляющими произвольные булевы функции многих переменных, до 27 переменных включительно. Заметим, что для однострочной распечатки такого вектора (содержащего 227 = 134 217 728 символов) потребовалась бы бумажная лента длиной свыше 250 километров.

1. Покомпонентные операции над булевыми векторами

Простейшими операциями набора POBS служат покомпонентные операции: операция инвертирования над одним вектором и произвольные двухместные булевы операции над парой одноразмерных векторов. Проиллюстрируем их следующими примерами.

Обозначим через g и h булевы векторы, представляющие булевы функции g(x) и h(x), где x = (x1, x2, x3, x4, x5). Пусть

g = 10001100 00100010 11100001 00101010, h = 00110010 10001111 01100011 01100011.

Тогда

£ =01110011 11011101 00011110 11010101, g V й =10111110 10101111 11100011 01101011,

£ л й = 00000000 00000010 01100001 00100010, g 0 й = 10111110 10101101 10000010 01001001 и т. д.

Более сложной является операция перестановки аргументов булевой функции, представленной булевым 2"-вектором. Она определяется перестановкой на множестве номеров переменных и приводит к соответствующей перестановке компонент вектора.

Например, в результате перестановки номеров (4, 2, 1, 3) переменные множества X = X2, Xз, X4) перегруппируются в новую последовательность ^4, X2, Xl, Xз).

Это приводит к соответствующей перестановке компонент вектора /, представляющего булеву функцию f (х). Компонента ^ помещается на месте с номером і, если двоичный код к номера k представляет собой результат произведения матрицы перестановок Р на двоичный код і номера і. Другими словами, вектор к равен покомпонентной дизъюнкции столбцов матрицы Р, отмеченных единицами в векторе і. Проиллюстрируем это на примере замещения компоненты /[3 компонентой ^4:

р і к

1 0 0 0 1 1 1

2 0 1 0 0 1 1

3 1 0 0 0 х 0 = 1

4 0 0 1 0 1 0

1 2 3 4 13 14

В результате перестановка (4, 2, 1, 3) на множестве компонент вектора х приводит к следующей перестановке на множестве компонент вектора /:

(0, 8, 1, 9, 4, 12, 5, 13, 2, 10, 3, 11, 6, 14, 7, 15).

Пусть / = 0111 1010 0100 1001. Тогда рассматриваемая перестановка на множестве компонент этого вектора приводит к его значению у*, соответствующему новому порядку ^4, x2, Xl, x3) перечисления аргументов:

у* = 0100 1110 1110 0001.

2. Операции над соседними элементами в булевом пространстве

В набор РОББ входят также операции взаимодействия различных компонент в пределах одного булева 2"-векторау, задающего функцию f(х) = f^, x2, ..., xи). Главную роль играют при этом операции над соседними элементами булева пространства. Соседними называются булевы п-вєкторьі, различающиеся значениями ровно в одной компоненте. При представлении булева пространства в виде многомерного булева куба они отображаются вершинами, соединенными ребрами.

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

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

Аналогичная идея была положена в основу коммутационной машины, предложенной У.Д. Хиллисом в 1978 г. и разработанной компанией Thinking Machine Corporation в 1985 г. Эта машина обеспечивает информационную связь в многопроцессорном компьютере, компоненты которого непосредственно связаны между собой аналогично вершинам n-мерного булева куба. Передача информации между любыми процессорами в таком компьютере производится не более чем за n тактов. На базе этой разработки была создана серия коммутационных машин, которые используются исследователями, работающими в области искусственного интеллекта, для решения задач логического вывода [4].

При значении n, превышающем 5, вектор f удобно задавать булевой матрицей размером 25 х 2n-5, представляя ее 32-элементные строки словами в памяти машины (что естественно для большинства современных компьютеров). В этом случае любые два соседние по переменной xk элемента пространства M находятся в пределах одного слова, если k < 6, и принадлежат различным словам в противном случае, что должно учитываться при программировании. Заметим, что при иллюстрации приводимых ниже примеров используются более компактные матрицы

4 '■ч n—4

размером 2 х 2 .

Введем следующие простейшие операции преобразования булевой функции f (x) = f (xb x2, ..., xn), заданной вектором f, путем взаимодействия соседних элементов:

f - k - присвоение значения 0 аргументу xk (получение функции f(xk = 0));

f + k - присвоение значения 1 аргументу xk (получение функции f(xk = 1)).

Продемонстрируем их выполнение на следующих матрицах, в которых показано разбиение множества элементов на две части, соответствующие различным значениям выбранной переменной xk и называемые ниже условно левой (отмеченной полужирным шрифтом) и правой:

f

0110110101011110 | 0010010000010110 | 1100101001110001 || 0100010111010011

f-4

0110011001010101

0010001000010001

1100110001110111

0100010011011101

f+4

--------- 3

-- -- -- -- 5

- - - - - - - - 6 1101110111101110 0100010001100110 1010101000010001 0101010100110011

0110110101011110 | 0010010000010110

| 1100101001110001 || 0100010111010011 1 2 f

0110110101011110

0010010000010110

0110110101011110

0010010000010110

f-1

1100101001110001

0100010111010011

1100101001110001

0100010111010011

f+1

При выполнении операции f- k оба элемента в каждой паре соседних по переменной xk элементов получают значения из левой части, при выполнении операции f + k - из правой. Если п < 6 (на данном примере п < 5) эта операция реализуется посредством соответствующего сдвига (с вытеснением) столбцов в матрице, в противном случае - путем сдвига строк.

В порядке обобщения введем следующие операции, в которых вместо скаляра k используется ^компонентный булев вектор и:

f - и - присвоение значения 0 всем аргументам xk, которым соответствуют компоненты щ вектора и со значением 1,

f + и - присвоение значения 1 всем аргументам xk, которым соответствуют компоненты uk вектора и со значением 1.

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

Например, если п = 8 и и = 01100010, то операция f - и эквивалентна композиции ((/ - 2) - 3) - 7 , а операция f + и эквивалентна композиции ((/ + 2) + 3) + 7 . При этом одно и то же значение присваивается переменным x2, xз и x^ .

Введем также операцию симметрирования Б f * к, при выполнении которой оба соседних по переменной xk элемента в каждой паре получают одинаковое значение, в результате применения двухместного оператора *, выбираемого из множества (V, л, ^, ®, ...}, к исходным значениям этих же элементов. Эта операция также сводится к рассмотренным выше, поскольку

Бf * k = с/- к) * с/ + к).

Например,

8£Ф1

0110110101011110 1010011100101111 | 0010010000010110 0110000111000101

| 1100101001110001 1010011100101111

|| 0100010111010011 0110000111000101

0111111101111111

0011011000110110

1111101111111011

1101011111010111

3

4

5

6

1 2

В частности, операция Б / ® к представляет хорошо известную операцию дифференцирования булевой функции по переменной xk.

Операция симметрирования Б / * к также обобщается путем использования вектора и вместо скаляра к. При этом она представляется выражением Б / * и и эквивалентна последовательности операций Б / * к,, в которой скаляры к, представляют номера единичных компонент вектора и. В этом случае оператор * выбирается из множества (V, л, ®}.

Например, если и = 010011, то операция Б / л и эквивалентна выражению

Б(Б(Б / л 2) л 5) л 6.

Ее можно интерпретировать так: все элементы фрагмента вектора / , соответствующего конъюнкции X! х3 х4 , получают значение 0, если и только если хотя бы один из них был равен 0.

3. Операции преобразования размерности булевых векторов

Такие операции позволяют реализовать взаимодействие булевых векторов различной размерности.

Рассмотрим два булевых вектора:

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

^вектор и с к единицами, отмечающими некоторые к переменных из множества X = (к1, x2, ..., xn),

2к-вектор Н, задающий булеву функцию h отмеченных переменных.

Введем в набор РОВБ операцию Н х и переноса функции h в фрагмент пространства п переменных, соответствующий конъюнкции инверсий переменных, не отмеченных в и. Все элементы остальных фрагментов получают при этом значение 0.

Пусть, например, п = 5, и = 01101 и Н = 10010011.

Тогда строится 25-вектор, в котором выделяется фрагмент, соответствующий конъюнкции Xl x4:

00000000 00000000 00000000 00000000,

и в последний вписывается вектор Н. В результате получаем:

Ьхи = 10000100 00001100 00000000 00000000.

По аналогии вводится операция /: и, осуществляющая обратный перенос информации из упомянутого фрагмента в вектор Н, задающий получаемую при этом булеву функцию h от к переменных. Так, если и = 01010 и

/ = 00110010 11100000 11100110 00011101,

то находится фрагмент, соответствующий конъюнкции Xl x3 X5:

00110010 11100000 11100110 00011101,

и содержащаяся в нем информации используется для построения искомого вектора:

Н = /: и = 0111.

Если известно, что представленная вектором / функция / зависит лишь от переменных множества и (остальные оказываются фиктивными), то посредством операции / : и они удаляются из функции и результат представляется вектором Н.

4. Операции над частичными булевыми функциями

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

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

Пусть, например,

= 1-001010 011--01-1.

Тогда

/1= 10001010 011000101,

/°= 00110101 100001000.

В этом случае операция присвоения значения 0 аргументу хк будет представляться парой операций /!- к , / °- к, а значения 1 - парой /1 + к , / ° + к.

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

1 ° ° ° 1 1 ° 1 / - и , / - и , / + и , / + и .

5. Программирование в базисе РОБ8

Продемонстрируем технику программирования в базисе РОВБ на примерах решения некоторых задач теории булевых функций.

1. Проверка частичной булевой функции на монотонность

Рассмотрим частичную булеву функцию /х) = (х1, х2, ..., хп), заданную двумя множествами наборов значений аргументов: множеством М1, на котором она

принимает значение 1, и множеством М°, где она принимает значение 0. Назовем ее монотонной, а точнее, положительной функцией, если для любой пары наборов р е М 1 и q е М выполняется условие р > q (вектор р больше вектора ^), т.е. для любой пары (р,, д,) одноименных компонент р, > д, и хотя бы для одной пары РI > 41 .

Очевиден простой метод проверки функции на монотонность, основанный на переборе всех пар (р, q) и проверке для каждой из них условия р > q . Однако с увеличением числа переменных п и соответственным ростом мощностей множеств М1 и М° такой метод оказывается слишком трудоемким. Более эффективен предлагаемый ниже метод, использующий операции из набора РОВБ.

Зададим функцию/(х) двумя булевыми 2"-векторами: вектором / 1 и / °. Элементы множества М1 представлены единицами в векторе / 1. Обозначим через М* множество таких элементов булева пространства, каждый из которых больше некоторого элемента из множества М°, и представим это множество вектором / *.

Утверждение 1. Функция / (х) монотонна, если и только если / * / ° = 0.

Вектор /* можно найти с помощью введенных выше операций набора РОВБ, последовательностью п шагов. Сначала получим вектор / 2 = (/ 1 - 1) V/ 1, который представит множество М1, дополненное элементами булева пространства, соседними «сверху» к некоторым элементам из М1 по переменной х1. Затем полученное множество расширим аналогичным образом по следующей переменной х2 : / 3 = (/ 2 - 1) V / 2. Затем, повторив эту операцию по всем остальным переменным, получим искомый вектор / И+1 = / *.

Пусть, например, п = 5:

/1 = 00010000 00100000 00000001 00001010,

/ ° = 11000010 00000100 10100000 10000000.

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

f2 = 00010000 00100000 00010001 00101010 , f3 = 00010000 00110000 00010001 00111011 , f4 = 00010001 00110011 00010001 00111011 , f5 = 00010001 00110011 00010001 00111011 , f6 = 00010001 00110011 00010001 00111111 = f * .

Покомпонентная конъюнкция полученного вектора с вектором

11000010 00000100 10100000 10000000 f0

равна нулю f * л f 0 = 0), следовательно, рассматриваемая булева функция монотонна.

2. Поиск функциональных закономерностей

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

В работе [6] была решена следующая задача. Допустим, что задано множество объектов, представленных различными комбинациями значений n двоичных признаков (признак есть - признака нет). Спрашивается, можно ли всегда однозначно определить значение некоторого выделенного признака, если известны значения остальных? А если можно, то как это сделать?

Представим исходную информацию совокупностью R некоторых элементов в n-мерном булевом пространстве M = {0, 1}" над множеством признаков. Эти элементы задают известные объекты, и их можно рассматривать как корни некоторого булева уравнения F = 1 с переменными из множества x = (x1, x2, ..., xn).

Говорят, что уравнение F = 1 разрешимо относительно некоторой переменной, если ее можно представить булевой функцией от остальных переменных уравнения, определенной на множестве R [5]. Рассмотрим задачу выявления таких переменных в уравнении F = 1 и построения соответствующих функций.

Утверждение 2. Необходимым и достаточным условием разрешимости уравнения F = 1 относительно переменной Xi является отсутствие в множестве R пар наборов, соседних по переменной xi .

Доказательство от противного (по правилу modus tollens): если найдется такая пара, то переменная xi принимает в ней различные значения на одинаковых наборах значений остальных переменных, что противоречит определению функционального отношения.

Обозначим через f (x) характеристическую булеву функцию множества R, положив, что f (qj) = 1, если qj е R и f (qj) = 0, если qj g R. Через f (x, = 0) и f (x, = 1) обозначим результат замены в функции f (x) переменной xi на константу 0 или 1 соответственно.

Утверждение 3. Уравнение Е = 1 разрешимо относительно переменной х, если и только если / (х, = 0) л / (х, = 1) = 0.

Это утверждение позволяет применить для проверки разрешимости уравнения по переменной х; введенные выше векторные операции / - г и / + г. Переформулируя утверждение в терминах этих операций, можно утверждать, что необходимым и достаточным условием разрешимости уравнения Е = 1 относительно переменной х, является выполнение отношения

(/ - г) л (/ + г) = 0.

При выполнении этого условия возникает задача нахождения соответствующей булевой функции, которая в общем случае оказывается частичной, и ее оптимального доопределения. Оптимизация может заключаться как в минимизации числа аргументов функции, так и в упрощении ее алгебраического представления, например в дизъюнктивной нормальной форме (ДНФ).

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

/:=Ахк = 0) V /(хк = 1).

В терминах введенных выше векторных операций оно определяется как Б / V к, откуда следует

Утверждение 4. Аргумент хк можно удалить из числа аргументов переменной х, как функции остальных переменных, если и только если

((Б / V к) - г) л ((Б/ V к) + г) = 0.

3. Последовательная композиция булевых функций

Рассмотрим следующую задачу. На множестве аргументов х = (х1, х2, ..., х„) булевыми п-векторами и, w и V задано разбиение на три непересекающиеся подмножества и, к и V : х = и и к и V. Заданы также две булевы функции ^и, к) и g(x, к, V), представленные соответствующими булевыми векторами Н и £. Требуется вычислить их композицию при условии х = ^и, к) и представить полученную при этом булеву функцию /х) 2"-вектором /

Такая композиция, называемая неразделительной последовательной двухблочной, иллюстрируется примером на рис. 2, где п = 6 и множества и = (х1, х2), к = (х3, х4) и V = (х5, х6) заданы шестимерными булевыми векторами и = 110000, к =001100 и V=000011.

Положим, что функции ^и, к) и g(x, к, V) заданы соответствующими векторами:

Н = 1101001001101100, g = 0011010011001001 1010010110101011. д0 д1

Для удобства последующих рассуждений вектор g разбит на две половинки, задающие значения функции g(x, к, V) при значениях 0 и 1 двоичной переменной х.

Рис. 2. Пример неразделительной последовательной двухблочной композиции

Представим булево пространство переменных х = (и, V) в следующем виде:

0000 0000 0000 0000

0000 0000 0000 0000

0000 0000 0000 0000

0000 0000 0000 0000

иг

Затем последовательно отобразим в это пространство функции £, Н0 и Н1 , вводя при этом дополнительные фиктивные переменные из множеств V и и и представляя результаты 2"-векторами а, Ь и с:

к х (и, ^) - V = а

1000 1000 0000 1000 1111 1111 0000 1111

0000 0000 1000 0000 0000 0000 1111 0000

0000 1000 1000 0000 0000 1111 1111 0000

1000 1000 0000 0000 1111 1111 0000 0000

£о х (^, V) - и = Ь

0011 0100 1100 1001 0011 0100 1100 1001

0000 0000 0000 0000 0011 0100 1100 1001

0000 0000 0000 0000 0011 0100 1100 1001

0000 0000 0000 0000 0011 0100 1100 1001

£1 х (^, V) - и = с

1010 0101 1010 1011 1010 0101 1010 1011

0000 0000 0000 0000 1010 0101 1010 1011

0000 0000 0000 0000 1010 0101 1010 1011

0000 0000 0000 0000 1010 0101 1010 1011

вектор /, представляющий искомую композицию а Ь V а с = /

В заключение находим функций Н(и, ^) и ^х, ^, V):

0011 0100 0000 1001 0000 0000 1100 0000 0000 0100 1100 0000 0011 0100 0000 0000

0000 0000 1010 0000 1010 0101 0000 1011 1010 0000 0000 1011 0000 0000 1010 1011

0011 0100 1010 1001 1010 0101 1100 1011 1010 0100 1100 1011 0011 0100 1010 1011

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

Допустим, что известна частичная булева функция f (x) от n переменных, заданная троичным вектором f -. Требуется проверить ее на разделимость по нестрогому разбиению и/v на множестве x, т.е. узнать, существуют ли такие функции h(^ w) и g(x, w, v) от меньшего числа переменных, что f (x) = g(h(^ w), w, v), где w = x \ (и u v).

Заметим, что при положительном ответе на этот вопрос можно упростить логическую схему, реализующую функцию f(x) (например, при логическом синтезе в базисе элементов LUT (look up tables), реализующих функции ограниченного числа переменных).

Известно необходимое и достаточное условие декомпозируемости полностью определенной функции fx) по разбиению и/v, которое должно выполняться для каждого коэффициента f (и, v) дизъюнктивного разложения Шеннона функции f(x) по переменным множества w : коэффициенты дизъюнктивного разложения этих коэффициентов по переменным множества и должны принимать не более двух различных значений.

Коэффициенты f (и, v) дизъюнктивного разложения Шеннона частичной булевой функции f(x) по переменным множества w будем представлять фрагментами T - троичными матрицами, строки которых соответствуют различным значениям вектора и, а столбцы - различным значениям вектора v. Элементами фрагментов служат соответствующие компоненты троичного вектора f -. Условие разделимости функции fx) по разбиению и/v сформулируем теперь следующим образом: для каждого коэффициента f (и, v) возможно такое доопределение соответствующей матрицы Г (замена значений «-» на 0 или 1), при котором ее строки примут не более двух различных значений.

В работе [7] показано, что проверка этого условия сводится к проверке на би-хроматичность графов ортогональности строк каждой из матриц Г;. Там же предложен эвристический алгоритм, гарантирующий получение правильного решения при условии связности рассматриваемых графов (это условие обычно выполняется). Троичный вектор f представляется в нем соответствующей парой булевых векторов f i и f 0. Эффективно используются операции над соседями, обеспечивающие одновременную проверку всех 2w| фрагментов Г;.

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

Алгоритм старается разбить множество строк в каждом фрагменте на два класса A и B взаимно совместимых строк. Над исходными векторами f i и f 0 реализуется последовательность преобразований, результаты которых представляются булевыми 2"-векторами а 1 и а 0.

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

00 а :=f - и,

а 1 :=f 1 - и.

Затем в каждом фрагменте находится множество строк, ортогональных первой строке, и отмечается в булевом векторе b:

b := S (h 0f1 v h if0) v v.

Полученные множества образуют классы B и проверяются на совместимость:

a 0 := S (f 0b) v и;

a 1 := S (f Jb) v и.

Если при этом a 0 a 1 Ф 0, то некоторое из рассматриваемых множеств оказывается несовместимым, откуда следует, что граф ортогональности строк соответст-

вующего фрагмента не бихроматичен и, следовательно, функция fx) не декомпозируема по разбиению u/v.

Если же a 0 a 1 = 0, реализуется следующая итерация. Классы A дополняются строками, ортогональными некоторым из строк классов B, и проверяются на совместимость. Затем аналогичным образом могут быть расширены классы B и т.д. Алгоритм заканчивает работу при выполнении определенного числа итераций.

ЛИТЕРАТУРА

1. Закревский А.Д. Вычисления в булевых пространствах // Логическая структура научного знания. М.: Наука, 1965. С. 292 - 310.

2. Закревский А.Д. Универсальная система для решения задач типа синтеза релейных схем // Труды Сиб. физ.-тех. ин-та. Томск, 1963. Вып. 42. С. 9 - 37.

3. Закревский А.Д. Машина для решения логических задач типа синтеза релейных схем // Синтез релейных устройств: Труды Международного симпозиума по теории релейных устройств и конечных автоматов. М.: Наука, 1965. С. 346 - 356.

4. Хиллис У. Дэниел. Коммутационная машина // В мире науки (Scientific American). 1987, август. № 8. C. 60 - 69.

5. Data mining and knowledge discovery approaches based on rule induction techniques (E. Tri-antaphyllou and G. Felici, Eds.). Massive Computing Series, Springer, Heidelberg, Germany, 2006.

6. Закревский А.Д. О разрешимости булевых уравнений // Доклады НАН Белоруссии. 2007. Т. 51. № 5. С. 44 - 46.

7. Закревский А.Д. Декомпозиция частичных булевых функций - проверка на разделимость по заданному разбиению // Информатика. 2007. № 1(13). С. 16 - 21.

Статья представлена кафедрой программирования факультета прикладной математики и кибернетики Томского государственного университета и оргкомитетом 7 Российской конференции с международным участием «Новые информационные технологии в исследовании сложных структур», поступила в научную редакцию 30 мая 2008 г.

i Надоели баннеры? Вы всегда можете отключить рекламу.