Программный модуль преобразования дизъюнктивных нормальных форм булевых функций в полином Жегалкина

УДК 004.021

ПРОГРАММНЫЙ МОДУЛЬ ПРЕОБРАЗОВАНИЯ ДИЗЪЮНКТИВНЫХ НОРМАЛЬНЫХ ФОРМ БУЛЕВЫХ ФУНКЦИЙ В ПОЛИНОМ ЖЕГАЛКИНА А.А. Акинин, С.Л. Подвальный

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

Ключевые слова: полином Жегалкина, булева функция, дизъюнктивная нормальная форма

В [1] были разработаны и исследованы модели легкодиагностируемых логических преобразователей (ЛП) на программируемых логических матрицах (ПЛМ) с перестраиваемым элементным базисом. Основу таких ПЛМ составляет базис логических функций И (AND) и ИСКЛЮЧАЮЩЕЕ ИЛИ (EXOR) [2]. Данные элементы совместно с элементом генератор логической 1 составляют элементный базис Жегалкина. Для реализации таких ЛП требуется преобразование дизъюнктивной нормальной формы (ДНФ) булевой функции (БФ) в так называемый полином Жегалкина. Вследствие того, что полином Жегалкина может быть получен только на основе совершенной дизъюнктивной нормальной формы (СДНФ) функции, то

необходимо располагать не только автоматическими средствами преобразования СДНФ в полином Жегалкина, но и средствами автоматического преобразования произвольных ДНФ БФ в СДНФ.

В [3] предложен метод преобразования ДНФ булевых функций в полином Жегалкина. Суть этого метода заключается в следующем. Метод

реализуется в два этапа: на первом этапе

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

присутствующих и отсутствующих членов полиномиальной нормальной формы (ПНФ) БФ. Формирование ПНФ функции осуществляется путём последовательного преобразования каждого минтерма СДНФ БФ в частные ПНФ (ЧПНФ) и на основе их последующей суперпозиции -формировании окончательной ПНФ БФ - полинома Жегалкина. Разработанные метод и алгоритм формирования ПНФ с использованием ЧПНФ

Акинин Андрей Александрович - ООО “Мобильные ответы”, соискатель, e-mail: aaakinin@mail.ru Подвальный Семен Леонидович - ВГТУ, д-р техн. наук, профессор, e-mail: spodvalny@yandex.ru

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

В [4] было показано, что основной целью при программной реализации алгоритма восстановления СДНФ должно являться достижение оптимального соотношения между быстродействием процесса восстановления СДНФ по заданной сокращенной ДНФ и требуемым для решения этой задачи аппаратным ресурсам, в связи с чем был предложен алгоритм восстановления таблицы истинности БФ по произвольной ДНФ, который представлен на рис.

1.

НАЧАЛО

1:-1, К:-количеств о конъюнкций в ДНФ; обнуление таблицы истинности ^ Е

4 ~~

S:- 1|1]; W:-i[I]Tt[I]; М- W

І___________________

G := ( S&M ) v а[1]

__________________L._________________

Е[0] := 1

I

ОСТАНОВ

Рис. 1. Схема алгоритма восстановления таблицы истинности БФ по произвольным ДНФ

Как видно из рис. 1, главным преимуществом предложенного алгоритма является то, что каждый минтерм СДНФ определяется не перебором всех возможных наборов значений аргументов БФ, а вычисляется на основе рекуррентного соотношения - в : = ( 8&М ) у а[1], в связи с чем,

данный алгоритм обладает приемлемой вычислительной сложностью по сравнению с известными идентичными алгоритмами при минимальных требованиях к ресурсу памяти ЭВМ.

Рассмотрим существо предложенного метода формирования ПНФ БФ путём последовательного преобразования каждого минтерма СДНФ функции в ЧПНФ на примере.

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

Таблица 1

1 Р q г f

0 0 0 0 1

1 0 0 1 1

2 0 1 0 1

3 0 1 1 0

4 1 0 0 0

5 1 0 1 0

6 1 1 0 1

7 1 1 1 0

той же функции. В остальных строках метками «1» отмечены те члены ПНФ, которые входят в частные ПНФ в соответствии с вычисленными выше ЧПНФ. Жирным шрифтом выделены те В^ которые соответствуют единичным значениям функции Др, ^ г).

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

Ф (д Ф дг Ф рд Ф рдг) Ф (дг Ф рдг) =

=

Тождественный (1) результат с использованием данных табл. 2 может быть получен путём суммирования по модулю 2 двоичных векторов В^ соответствующих выделенным

минтермам, что иллюстрируется табл. 3.

Таблица 3

Преобразуем каждый минтерм СДНФ функции Др, q, г) в частные ПНФ - В^ где 7- = 07, если

известно, что (1 Ф р)(1 Ф д) = 1 Ф р Ф д Ф рд и р = 1  р ,

для V р, д, г е {0,1}.

/0 (0,0,0) = = (1Ф р)(1 Ф д)(1 Ф г) =

= 1 Ф р Ф д Ф г Ф рд Ф дг Ф рг Ф рдг = В0 /(0,0,1) = Удг = (1Ф р)(1Ф д)г =

= г Ф дг Ф рг Ф рдг = В1

/2 С0,1,0) = рдг =(1 Ф р)д(!Ф г) =

= д Ф рд Ф дг Ф рдг = В2

/з(0,1,1) = рдг = (1Ф р)дг = дг Ф рдг = В3

/4(1,0,0) = рдг = р(1 Ф д)(1Ф г) =

= р Ф рд Ф рг Ф рдг = В4

/5 (1,0,1) = рдг = р(1 Ф д)г = рг Ф рдг = В5

Леи0)=рдг=рд(1 г)=рд  рдг=В6 /7 (1,1,1) = рдг = В7

Сведем полученные данные в табл. 2.

Таблица 2

ш ЧПНФ

1 г ч ЦТ Р Р г РЧ Р Ч г

рдг 1 1 1 1 1 1 1 1 В0

рдг 1 1 1 1 В!

рдг 1 1 1 1 в2

рдг 1 1 В3

рдг 1 1 1 1 в4

рдг 1 1 в5

рдг 1 1 Вб

рдг 1 в7

В табл. 2 в первом столбце перечислены все возможные минтермы функции f(p, q, г) - К1, а в первой строке указаны все возможные члены ПНФ

Кг ЧПНФ

1 000 г 001 010 ^ г 011 р 100 Р г 101 ка 110 Р 111 В,

рдг 0 0 0 1 1 1 1 1 1 1 1 Во

рдг 001 1 1 1 1 В!

рдг 0 1 0 1 1 1 1 в2

рдг 0 11 1 1 В3

рдг 1 0 0 1 1 1 1 В4

рдг 1 0 1 1 1 В5

рдг 110 1 1 Вб

рдг 1 1 1 1 В7

Е 1 0 0 1 1 0 1 0 в

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

Анализ данных табл. 3 наглядно

демонстрирует следующую закономерность: разряды двоичных векторов BJ принимают единичные значения только в том случае, если единичные значения переменных в номерах строк полностью входят в двоичные номера столбцов таблицы. Исключение составляет только вектор В0, все элементы которого равны 1.

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

таблицы истинности логической функции, для формирования ПНФ достаточно иметь только таблицу минтермов данной функции.

Алгоритм формирования ПНФ с использованием ЧПНФ представлен на рис. 2.

напало

Задание сигаольнт имен аргументов

Е Ф и закрепление этих имен за разрядами да схемного п-разрядааго

_______________тает S________________

__________________*__________________

ВВОДЯТСЯ ИСХОДНЫ* данные п - число аргументов Е Ф, Е - вектор, содержащий шаненкя ТИБФ,где N=2n-1

I

Создание и обнуление двоичного me сив 4 В= {bü Jb|,...

+

В brate лени е ico пт ест т микгермов ________БФ по вектору Е, j = 1_______

Вводи обнулеи-к вектора. D

№

-—Да

к,=о

^ Ны

D. =К,

D, = D,+ l

________________Í________________

D| = D,vK, t

b[Df]-b[Df] _________________I

_________________1

Увеличение счетчика, i на. 1

-----------------I ~

\________________

По полученному мае шву В и переменной S формируется ПНФ ПОГРН е СЕСОИ функции Е СИМЕ ОЛЕГОМ

"Г

OCIABD0

Рис. 2. Алгоритм формирования ПНФ с использованием ЧПНФ

Исходными данными для предложенного алгоритма являются: п - число аргументов БФ, вектор Е размерности 2п, содержащий значения СДНФ БФ.

Основное достоинство алгоритма заключается в том, что ПНФ функции формируется путём преобразования каждого минтерма СДНФ в частные ПНФ (ЧПНФ) в виде их векторного представления так, как показано на рис. 3.

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

нормальной формы БФ заносятся в вектор В размерности 2п. Для корректной работы

программного модуля необходимо обнулить двоичные массивы В и Б.

На первом шаге рассматриваемого фрагмента алгоритма, необходимо получить векторное представление очередного минтерма СДНФ - К

Рис. 3. Фрагмент алгоритма формирования ЧПНФ для каждого минтерма БФ

Если Kj равно 0, то в силу свойств операции сумма по модулю 2 (  ) должны быть

проинвертированы все значения вектора B. Действительно, если посмотреть на первую строку табл. 3, содержащую все возможные члены ПНФ БФ, то можно увидеть, что эта строка соответствует нулевой конъюнкции - pqr . В каждой ячейке этой строки записаны 1, то есть она содержит все члены ПНФ, которые входят в частные ПНФ.

Если Kj не равно 0, вычисляем номер бита вектора B={b0,b1,^,bN}, значение которого необходимо проинвертировать. Для этого

используем операции арифметического сложения Dj = Dj+1 и побитового сложения Dj = Dj v Kj. Повторяем вычисление и инвертирование

определенного номера бита вектора до тех пор, пока Dj < (2п-1). С помощью операции

инвертирования мы как бы добавляем следующий член ЧПНФ в итоговую ПНФ БФ, учитывая что x¡  x¡ = Ь а x¡  x¡ = 0 для V x¡ е {0,1} •

Далее переходим к следующему минтерму СДНФ БФ.

Таким образом, в векторе B по окончании цикла по j < m, где m - количество минтермов БФ, осуществляется поэлементное суммирование по модулю 2, с накоплением результата, сформированных по минтермам исходной СДНФ двоичных векторов частных ПНФ, в силу чего данный алгоритм является весьма экономичным по требуемой памяти и количеству операций, производимыми над символьными переменными.

Следует отметить также, что для эффективной программной реализации предложенных алгоритмов необходимо осуществить выбор наиболее рациональной формы хранения исходных и конечных данных программного модуля, которая позволяла бы не только хранить большой объем данных, но и производить над ними операции за минимально необходимый промежуток времени. В связи с чем, в качестве хранилища векторов B и E, размерности 2п, был выбран битовый массив dynamic_bitset из библиотеки BOOST C++. Эта библиотека представляет собой собрание множества кроссплатформенных библиотек, созданных

независимыми разработчиками и тщательно проверенными на различных платформах (№'№'№.Ь0081.0г§). Отличительными особенностями массива dyпamic_b1tset являются: возможность

динамического изменения размера массива в ходе выполнения программы, поддержка быстрого доступа по индексу к произвольному элементу массива, поддержка элементарных логических операций (регистрового сдвига, сложения, умножения, инверсии и т. д.). Размер массива dyпamic_bitset ограничен величиной 232-1, вследствие чего максимальное число аргументов исходной ДНФ БФ должно быть ограничено числом 31.

На основе предложенных алгоритмов, реализующих метод преобразования ДНФ булевых функций в полином Жегалкина, был разработан программный модуль “Преобразователь булевых функций”. На рис. 4 представлено главное окно программного модуля “Преобразователь булевых функций”.

Рис. 4. Главное окно программного модуля “Преобразователь булевых функций”

Программа написана на языке С++, для ее функционирования необходимо не менее 5 Гб на жестком диске и не менее 512 Мб оперативной памяти.

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

выходного файла, содержащего ПНФ функции, зависящей от 20 переменных, СДНФ которой состоит всего из двух минтермов, занимает 1,5 Мб жесткого диска. Размер самого программного модуля составляет всего 330 Кб.

Разработанный программный модуль осуществляет ввод БФ, анализирует форму введенной функции и, при необходимости, автоматически восстанавливает ДНФ функции до СДНФ.

В представленном программном модуле, ПНФ БФ может быть сформирована как по нулевым значениям функции, так и по единичным. Предусмотрена возможность и автоматического получения ПНФ функции. При выборе этого способа расчета ПНФ, в программе реализуется подсчет нулей и единиц в СДНФ БФ. Далее, в зависимости от количества минтермов и макстермов функции, автоматически происходит выбор наиболее экономичного по ресурсам памяти способа формирования ПНФ - по единичным или по нулевым значениям соответственно.

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

Литература

1. Акинина Ю.С. Альтернативный подход к обеспечению легкодиагностируемости двухуровневых программируемых пользователем логических матриц / Ю.С. Акинина, С.В. Тюрин // Вестник Воронеж. гос. техн. ун-та. Сер. Вычислительные и информационнотелекоммуникационные системы. - Воронеж: ВГТУ, 2003. Вып. 8.3. С. 32-35.

2. Закревский А.Д. Полиномиальная реализация частичных булевых функций и систем / А. Д. Закревский, Н. Р. Торопов. М.: Эдиториал УРСС, 2003. 217 с.

3. Акинина Ю.С. Разработка метода преобразования дизъюнктивных нормальных форм в полиномиальную нормальную форму / Ю.С. Акинина // Современные проблемы информатизации в системах моделирования, программирования и телекоммуникациях: сборник трудов IX международной открытой научной конференции. 2004. Вып. 9. С. 271.

4. Акинин А.А. О программной реализации алгоритма восстановления совершенной дизъюнктивной нормальной формы / А.А. Акинин, Ю.С. Акинина // Информационные технологии моделирования и управления. 2010, №6

Воронежский государственный технический университет ООО “Мобильные ответы”

THE MODULE PROGRAMM OF TRANSFORMATION OF SUM OF PRODUCTS OF BOOLEAN’S FUNCTION’S INTO ZHEGALKIN’S POLYNOMIAL A.A. Akinin, S.L. Podvalniy

This article considers the realization program of transformation of sum of products of Boolean’s functions into Zhegalkin’s polynomial with stage-by stage regeneration of sum of products till they reach complete sum of products

Key words: Zhegalkin’s polynomial, boolean function, sum of products