ПРИКЛАДНАЯ ДИСКРЕТНАЯ МАТЕМАТИКА
2009 Теоретические основы прикладной дискретной математики №1(3)
ТЕОРЕТИЧЕСКИЕ ОСНОВЫ ПРИКЛАДНОЙ ДИСКРЕТНОЙ МАТЕМАТИКИ
УДК 519.7
МИНИМИЗАЦИЯ БУЛЕВЫХ ФУНКЦИЙ МНОГИХ ПЕРЕМЕННЫХ В КЛАССЕ ДНФ — ИТЕРАТИВНЫЙ МЕТОД И ПРОГРАММНАЯ РЕАЛИЗАЦИЯ
А. Д. Закревский, Н. Р. Торопов
Объединенный институт проблем информатики НАН Беларуси, г. Минск, Беларусь
E-mail: [email protected]
Предлагается итеративный алгоритм минимизации булевых функций многих переменных, основанный на использовании параллельных операций над соседними элементами в булевом пространстве аргументов. Он включает операцию быстрого нахождения элементов характеристического множества с малым числом соседей и формирования определяемых ими импликант, итеративную процедуру применения этой операции к последовательно сокращаемому характеристическому множеству и операцию приведения множества полученных конъюнктов к корректной
ДНФ.
Ключевые слова: булевы функции, ДНФ, минимизация.
Введение
Классическая задача минимизации булевых функций в классе дизъюнктивных нормальных форм (ДНФ) может быть сформулирована следующим образом.
Определим произвольную булеву функцию f (ж) = f (xi, x2,... , xn) стандартным образом булевым вектором f с 2n компонентами, пронумерованными слева направо, начиная с нуля, причем компонента с номером k задает значение функции f на наборе значений аргументов, представляющем общепринятый двоичный код b числа k.
Например, следующий вектор f представляет булеву функцию f шести переменных xi, x2, Хз, x4, x5, Хб, принимающую значение 1 на 27 наборах значений аргументов, образующих характеристическое множество M1 = {000000, 000011,000101,... , 111110} функции f. Порядковые номера соответствующих компонент вектора f равны 0, 3, 5, ...,62.
-----------------------------------x1
----------------------------------------------------x2
--------- -------- -------- ---------x3
--- ---- ---- ---- ---- ---- ---- ---- x4
-- --- --- --- --- --- --- --- --- --- -- -- --- --- --- ---x5
--------------------------------------------------------------------x6
10010101 00100110 00101101 10110010 00010010 01010100 10001001 00111010 f.
Заметим, что такой вектор можно интерпретировать как совершенную нормальную форму булевой функции, члены которой представлены единичными компонентами вектора и их кодами. Например, код b = 001010 элемента f1o задает полную элементарную конъюнкцию x1x2x3x4x5x6.
Проблема заключается в том, чтобы представить заданную вектором f функцию f в ДНФ, желательно минимизированной. Заметим, что традиционные методы решения этой задачи связаны с затратами времени, быстро растущими с ростом п, и становятся практически неприемлемы при п > 20, когда число членов в совершенной ДНФ исчисляется миллионами [1]. В связи с этим в данной работе предлагается оригинальный метод получения ДНФ булевых функций, число аргументов которых может достигать 25. Метод основан на применении эффективных параллельных операций над булевыми 2П-векторами, предложенных в работах [2, 3].
К таким операциям относится, в частности, операция конъюнктивного симметрирования вектора f по переменной Хі, обозначаемая ниже через Я f Л і. При ее выполнении вектор f разбивается на 2П-1 пар компонент, соседних по переменной хі, и оба элемента каждой пары получают значение, равное конъюнкции исходных значений этих элементов. Напомним, что соседними называются такие компоненты вектора f, которым соответствуют наборы значений аргументов, различающиеся ровно в одном аргументе.
Заметим,что при числе переменных, превышающем 5, удобно представлять вектор f в виде булевой матрицы размером 25 на 2П-5, отображая её 32-компонентные строки словами в компьютерной памяти (что адекватно для большинства современных компьютеров). Тогда любые два элемента вектора f, соседние по переменной хі, будут принадлежать к одному слову, если і < 6, и к разным словам в противном случае, что можно использовать для ускорения вычислений.
1. Построение булевой матрицы соседства N
На первом этапе предлагаемого метода посредством п-кратного применения операции Я f Л і строится булева матрица соседства N размером п х 2П. Каждая строка пі этой матрицы представляет результат выполнения операции Я f Л і при конкретном значении параметра і (от 1 до п). Матрица N отображает структуру характеристического множества М1 функции f (х), на котором эта функция принимает значение 1. Элемент пк матрицы N принимает значение 1, если и только если к-й элемент вектора f равен 1 и имеет соседа по переменной хі, также со значением 1. Таким образом, і-я строка этой матрицы отображает (единицами) подмножество элементов из М1, имеющих в этом же множестве соседей по переменной Хі , а к-й столбец показывает, по каким переменным имеет соседей соответствующий элемент из М1 , представленный к-й компонентой вектора f.
Продемонстрируем получение матрицы N на примере того же вектора f, задающего случайную булеву функцию шести переменных:
f =10010101 00100110 00101101 10110010 00010010 01010100 10001001 00111010,
00010000 00000100 00001001 00110010 00010000 00000100 00001001 00110010 00000101 00100010 00000101 00100010 00000000 00010000 00000000 00010000 00000100 00000100 00100000 00100000 00010000 00010000 00001000 00001000
N =
00010001 00100010 00000000 00100010 00000000 01000100 10001000 00100010 00000101 00000000 00000101 10100000 00000000 01010000 00000000 00001010
00000000 00000000 00001100 00110000 00000000 00000000 00000000 00110000.
2. Матричное представление ДНФ
В аналогичной форме булевыми вектором д и матрицей О той же размерности, называемыми вектором решения и матрицей решения, предлагается представлять и искомую ДНФ, рассматриваемую как некоторую совокупность интервалов булева пространства М = {0,1}п. В векторе д отмечаются некоторые содержащиеся в интервалах элементы множества М1, по одному для каждого интервала, а в столбцах матрицы О отмечаются внутренние переменные этих интервалов.
Рассматривая векторы f и д как множества отмеченных в них элементов пространства М, а матрицы N и О — как подмножества декартова произведения множеств х и М, сформулируем очевидное
Утверждение 1. д С f и О С N.
Другими словами, вектор решения д и матрица решения О могут быть получены соответственно из вектора f и матрицы N заменой в них некоторых единиц на нули, как это и делается в описываемом в данной статье методе.
Для рассматриваемого примера искомая ДНФ будет выглядеть следующим образом:
д =10010100 00000110 00101000 10010000 00000010 01000000 10000001 00001000,
00010000 00000100 00000000 00010000 00000000 00000000 00000001 00000000 00000100 00000010 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00100000 00000000 00000000 00000000 00000000 00000000 = 00000000 00000010 00000000 00000000 00000000 00000000 10000000 00000000 00000100 00000000 00000000 10000000 00000000 01000000 00000000 00001000
00000000 00000000 00001000 00010000 00000000 00000000 00000000 00000000.
В более известной форме эта ДНФ задается троичной матрицей, столбцы которой представляют элементарные конъюнкции (Х1Ж2ЖзЖ4Ж5Ж6, Ж2Ж3Ж4Ж5Ж6, ... и т. д.)
1 0-0-0 0 0 0-11 1-1
2 00 - 0 - 1 1 1 100 1 1 1
3 00 0 1 1-0 1 101 0 0 1
4 00 1 1 - 0 1 0 010 - 1 1
5 01 - 0 110 - 11-0 1 -
6 011100 - 0-01010.
Число р конъюнкций в полученной ДНФ равно весу вектора решения д, а длина ДНФ ( сумма рангов конъюнкций) равна рп - д, где д — число единиц в матрице О.
Заметим, что введенные выше булевы матрицы и векторы при программной реализации предлагаемого метода обрабатываются во внутренних циклах и, следовательно, должны быть представлены в оперативной памяти, что ограничивает их допустимый размер. Учитывая параметры персонального компьютера, можно утверждать, что данный метод достаточно быстро реализуется на нем, если число переменных минимизируемой булевой функции не превышает 25.
3. Выделение элементов с малым числом соседей
Построение реализующей функцию f ДНФ целесообразно начать с поиска элементов ядра решения — обязательных простых импликант высокого ранга. Назовем обязательной такую простую импликанту функции f, которая входит в любую кратчайшую
ДНФ этой функции. Поиск облегчается предварительным выделением в векторе f элементов характеристического множества М1 с небольшим числом соседей, поскольку именно такие элементы могут определять импликанты высокого ранга, отображаемые элементарными конъюнкциями со многими литералами.
Число соседей у элементов вектора f со значением 1 можно представить конечнозначным вектором ю
f =10010101 00100110 00101101 10110010 00010010 01010100 10001001 00111010 т =0..2.3.3 ..2..22. .. 1.23.3 1.62..3. ...2..0. .2.3.2.. 1...3.. 1 ..332.3.,
однако более удобно, в перспективе программной реализации последующих вычислений, рассортировать элементы по числу соседей и представить результат серией булевых векторов т^, в которых единицами отмечены элементы с г соседями.
Для рассматриваемого примера, при г < 4, получим
f =10010101 00100110 00101101 10110010 00010010 01010100 10001001 00111010, то =10000000 00000000 00000000 00000000 00000010 00000000 00000000 00000000, т1 =00000000 00000000 00100000 10000000 00000000 00000000 10000001 00000000, т2 =00010000 00100110 00001000 00010000 00010000 01000100 00000000 00001000,
тз =00000101 00000000 00000101 00000010 00000000 00010000 00001000 00110010.
Эти векторы, образующие соответствующую булеву матрицу М, легко получить эффективными покомпонентными операциями над строками матрицы N, что существенно ускоряет поиск подходящих импликант.
4. Нахождение простых импликант
Обозначим через £к троичный вектор, получаемый из вектора Ьк (кода элемента ^) присвоением значения - компонентам, отмеченным единицами в столбце пк матрицы N. Его можно интерпретировать как некоторый интервал Ш^к пространства М = = {0,1}п, а также как соответствующую элементарную конъюнкцию, которая может оказаться простой импликантой функции f.
Утверждение 2. Вектор £к представляет обязательную простую импликанту функции f, если и только если Ш^к С М1.
Утверждение 3. Для каждой обязательной простой импликанты функции f в матрице N найдется столбец пк, соответствующий которому троичный вектор £к представляет эту импликанту.
Легко находятся обязательные простые импликанты ранга п — они непосредственно представляются элементами множества М1, не имеющими соседей. Они отмечаются в векторе т0 и представляются соответствующими столбцами матрицы N, не содержащими единиц. Аналогично, все обязательные простые импликанты ранга п- 1 отмечены в векторе т1 и также представлены соответствующими столбцами матрицы N — они содержат по одной единице.
Выявление обязательных простых импликант меньшего ранга несколько сложнее. Однако оно достаточно просто для ранга п - 2 и п - 3, осуществляясь посредством покомпонентных операций над некоторыми столбцами матрицы соседства N.
Утверждение 4. Предположим, что к-й элемент вектора f имеет двух соседей. Тогда вектор £к представляет обязательную простую импликанту функции f, если и только если ^'-я компонента вектора f равна единице, где Ь = Ьк ф пк.
Например, Ь27 0 п27 = 011011 0 100001 = 111010, і = 58 и /58 = 1, следовательно, троичный вектор £27 = -1101- представляет обязательную простую импликанту.
Утверждение 5. Предположим, что к-й элемент вектора / имеет трех соседей. Тогда вектор £к представляет обязательную простую импликанту функции /, если и только если пк ^ п7 (вектор пк поглощается вектором п7), где Ь7 = Ьк 0 пк.
Доказательство этого утверждения основано на том факте, что векторы Ьк и Ь7 являются противолежащими элементами в интервале 1п1к ранга 3 и вместе со своими соседями покрывают все восемь элементов этого интервала (рис. 1).
Рис. 1
Утверждение 6. Предположим, что к-й элемент вектора f имеет четырех соседей. Тогда вектор Ьк представляет обязательную простую импликанту функции f, если и только если пк ^ п7 для трех (это минимальное число) значений индекса ], которые можно определить в соответствии с рис. 2.
Рис. 2
Возникает вопрос о практической целесообразности проверки компонент вектора f на выполнение условий, сформулированных в утверждениях 4-6. Предположим, что задана булева функция от п переменных с вероятностью 1/2 значения 1 в каждой компоненте, независимо друг от друга. Рассмотрим некоторую компоненту со значением 1 и к соседями. Насколько вероятно, что эта компонента определяет соответствующую простую импликанту ранга п - к?
Утверждение 7. Вероятность такого события равна 1/2* , где £ = 2к - (к + 1).
Эта вероятность быстро стремится к нулю. Например, при к = 2, 3,4 и 5 она равна 1/2, 1/16, 1/2048 и 1/67 208 864 соответственно, будучи независима от п.
Поэтому в предлагаемом эвристическом алгоритме анализу подвергаются лишь такие единичные компоненты вектора f, число соседей у которых не превышает трех.
5. Алгоритм получения частичного решения
В предлагаемом алгоритме последовательно находятся импликанты высокого ранга. Результат фиксируется введением единиц в вектор решения g (сначала g = 0), определением соответствующих им столбцов матрицы решения D и корректировкой
/*
, представляющего множество еще не покрытых элементов характеристического множества M:.
1. g := mo, f * := f \mo. Так находятся импликанты ранга n (в данном примере это две импликанты, задаваемые векторами 000000 и 100110 и определяемые элементами вектора f с номерами 0 и 38).
2. Последовательно рассматриваются элементы вектора f, отмеченные одновременно в векторах mi и f *. Для очередного элемента fk берется соответствующий ему набор , компонента которого, отмеченная единицей в столбце nk матрицы соседства N, заменяется на символ «—». Результат представляет простую импликанту ранга n — 1. Соответственно корректируются векторы g и f *: в первый добавляется одна единица, а из второго удаляются две.
Так, в данном примере последовательно рассматриваются элементы с номерами k = 18, 24, 48 и 55, которым соответствуют наборы 010010, 011000, 110000 и 110111 и которые определяют простые импликанты ранга n—1: 01—010, 0110—0,110—00, —10111. Вектор решения принимает значение
д = 10000000 00000000 00100000 10000000 00000010 00000000 10000001 00000000
и соответственно (в результате удаления поглощаемых элементов они отмечены подчеркиванием) меняется значение вектора f *:
f * = 00010101 00100110 00001100 00010010 00010000 01010100 00000000 00111010.
3. На этом этапе рассматриваются последовательно элементы fk с двумя соседями, отмеченные одновременно в векторах m2 и f*, и строятся импликанты ранга n — 2.
Сначала находятся элементы fk, удовлетворяющие условию утверждения 4. Соответствующие компоненты вектора g принимают значение 1, столбцы d матрицы D остаются равными столбцам nk матрицы N, и из вектора f * удаляются единицы, покрываемые интервалами Intk.
Если же условие утверждения 4 не выполняется, из двух соседей элемента fk выбирается один сосед, желательно еще не покрытый, в столбце dk остается лишь одна соответствующая единица и выполняется операция, предусмотренная для элемента с одним соседом.
В данном примере (он оказывается довольно простым) это приводит к окончательному решению — покрытию всех элементов характеристического множества Mi , получению пары векторов
д =10010100 00000110 00101000 10010000 00000010 01000000 10000001 00001000,
f* =00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
и построению матрицы решения D, получаемой из N удалением одной единицы в столбцах, отмеченных в векторе
m2 = 00010000 00100110 00001000 00010000 00010000 01000100 00000000 00001000,
и удалением всех единиц в столбцах, не отмеченных в векторе g :
QQQlQQQQ QQQQQlQQ QQQQQQQQ QQQlQQQQ QQQQQQQQ QQQQQQQQ QQQQQQQl QQQQQQQQ QQQQQlQQ QQQQQQlQ QQQQQQQQ QQQQQQQQ QQQQQQQQ QQQQQQQQ QQQQQQQQ QQQQQQQQ
D = QQQQQQQQ QQQQQQQQ QQ1QQQQQ QQQQQQQQ QQQQQQQQ QQQQQQQQ QQQQQQQQ QQQQQQQQ QQQQQQQQ QQQQQQlQ QQQQQQQQ QQQQQQQQ QQQQQQQQ QQQQQQQQ lQQQQQQQ QQQQQQQQ QQQQQlQQ QQQQQQQQ QQQQQQQQ lQQQQQQQ QQQQQQQQ QlQQQQQQ QQQQQQQQ QQQQlQQQ QQQQQQQQ QQQQQQQQ QQQQlQQQ QQQlQQQQ QQQQQQQQ QQQQQQQQ QQQQQQQQ QQQQQQQQ.
4. Если вектор f* остается отличным от нуля, рассматриваются элементы с тремя соседями, отмеченные одновременно в векторах m3 и f *. Находятся элементы, удовлетворяющие условию утверждения 5, в решение вводятся соответствующие импликанты ранга n — 3. При невыполнении данного условия находятся определяемые этими элементами импликанты более высокого ранга: n — 1 и n — 2.
В результате описанной процедуры обработки элементов вектора f, имеющих не более трех соседей, мы получаем множество импликант, образующих частичное решение S и вектор f *, представляющий остаток — совокупность не покрытых этим решением элементов множества M1 .
б. Итеративный алгоритм
Идея этого эвристического алгоритма состоит в следующем. Сначала он находит частичное решение для вектора f, затем выполняет такую же операцию для остат-
/*
, дополняя множество получаемых импликант и соответственно упрощая вектор f * (удаляя из него некоторые единицы). Если после упрощения f * в нем остаются
/*
не станет равным
нулю.
Получаемые при этом импликанты могут быть далеко не обязательными и даже не простыми. Поэтому в заключение они приводятся к простым (понижением ранга), а также устраняются получаемые дубли.
Продемонстрируем алгоритм на конкретном примере. Пусть n =19 и каждый элемент вектора f принимает значение 1 с вероятностью p = 1/4. При этом предположении был сгенерирован случайный вектор f с l47 232 единицами и построена матрица соседства N с 219 = 534 288 столбцами и следующим распределением столбцов по числу единиц в них (N(i) столбцов содержат по i единиц):
i = Q 1 2 3 4 5 б 7 8 9 1Q 11 12 13 1415 1б,
N(i) = 29б 2Q87 718Q 1б352 25357 298б8 2б913 194Q6 11379 54Q1 2Q87 69Q 172 35 8 1 Q.
При первой итерации алгоритма обрабатываются элементы множества M1 с числом соседей i = Q, 1, 2 и 3, всего 29б + 2Q87 + 718Q + 1б352 = 25915 элементов. Находятся определяемые ими обязательные простые импликанты, общим числом 29б + 2Q82 + + 1974 + 8Q = 4432. Общее число найденных при первой итерации простых импликант (вместе с необязательными) равно 24 379. Они отмечаются в векторе решения g, и покрываемые ими элементы удаляются из переменного вектора остатка f (вначале равного f). Число единиц в векторе f * становится равным 81 91Q.
При второй итерации рассматривается новая матрица N, представляющая отношение соседства на элементах множества M1, отмеченных в векторе остатка f * .В этом
векторе выявляются элементы, имеющие не более трех соседей в этом же векторе, находятся соответствующие ими импликанты. Векторы g и f * получают новые значения. Если после этого f * = 0, выполняется следующая итерация.
Так для рассматриваемого примера выполняются четыре итерации, прежде чем вектор f * становится равным 0 — все элементы множества M1 оказываются покрытыми б1 477 импликантами со следующим распределением их по рангам (ранг — число импликант):
19 — 2 458,18 — 33 бб8,17 — 25 237,1б — 114.
Как уже говорилось, не все эти импликанты оказываются простыми. Поэтому в заключение выполняются две процедуры приведения полученного решения к корректному виду. Первая из них упрощает импликанты, обращаясь к исходной матрице соседства N и удаляя из импликант некоторые литералы, если это возможно. Она приводит к новому распределению импликант по рангам:
19 — 29б, 18 — 2Q 933,17 — 38 б17,1б — 1 б31.
Вторая процедура устраняет дубли среди полученных импликант, в результате чего число последних сокращается до 6Q972, а распределение их по рангам принимает следующий вид:
19 — 29б, 18 — 2Q 933,17 — 38 353,1б — 1 39Q.
Т. Компьютерные эксперименты
Изложенный выше итеративный алгоритм был программно реализован на С+—+ и испытан на компьютере (Pentium IV, 2.8 GHz). Чтобы было удобней работать с булевыми векторами, в которых перечислены соседи для рассматриваемых элементов вектора f, матрица соседства N предварительно транспонировалась.
Эксперименты проводились на множестве псевдослучайных булевых функций, с двумя параметрами: числом переменных n и плотностью единиц r, определяющей ожидаемое число единиц q в представляющем булеву функцию f векторе f: r = 32q/2n. Например, при r = 1б рассматривается абсолютно случайная булева функция, принимающая на каждом элементе булева пространства значение 1 с вероятностью l/2.
Прежде всего, были определены границы практической применимости предложенного алгоритма в пространстве параметров n и r. Дело в том, что при достаточно большом значении параметра r алгоритм может прекратить свою работу после некоторого числа итераций, поскольку числа N(Q),N(1),N(2) и N(3) могут оказаться равными нулю, в то время как вектор f будет оставаться отличным от 0.
Например, если n = l7 и r = l5, алгоритм останавливается после восьми итераций, найдя всего бЗб импликант. Но при n =17 и r = 14 он находит после 9Q итераций 2Q Q77 импликант, полностью покрывающих множество M1 (после последующего упрощения этих импликант и устранения дублей их число сокращается до 19 811). Следовательно, пара (n, r) = (17,14) является элементом верхней границы области применения алгоритма.
В табл. І представлены основные характеристики этой границы, полученные экспериментально. Строки таблицы соответствуют числу переменных n (от 4 до 23) и соответствующим им максимальным значениям параметра r, при которых программа работает корректно. Кроме того, в строках показаны следующие величины:
N — число единиц в векторе f (число импликант в совершенной ДНФ функции f);
С — число импликант в полученной ДНФ;
Б — длина полученной ДНФ (сумма рангов импликант);
$к — число импликант ранга к в полученной ДНФ (при к = п, п—1, п—2, п—3, п—4); Н — число итераций;
Т - затраченное время, в с.
Таблица 1
Экспериментальные характеристики границы области применения алгоритма
п г N С 5 $п $п— 1 $п—2 $п—3 $п—4 П Т
4 16 5 3 10 1 2 0 0 0 1 0,00
5 16 16 8 27 0 3 5 0 0 1 0,00
6 16 31 14 62 1 4 9 0 0 1 0,00
7 16 62 31 169 1 12 18 0 0 1 0,00
8 16 138 58 360 2 18 28 10 0 2 0,00
9 16 274 107 744 0 15 72 20 0 3 0,00
10 16 556 194 1513 0 14 127 53 0 3 0,00
11 16 1083 379 3355 1 35 250 93 0 4 0,01
12 16 2203 735 7127 0 31 456 242 6 5 0,03
13 16 4337 1414 15057 0 45 835 526 8 7 0,09
14 16 8734 2780 32266 0 64 1579 1116 21 12 0,35
15 15 16404 5313 67324 1 168 3258 1858 27* 13 1,01
16 14 31021 10181 139827 1 412 6671 3073 24 13 3,12
17 14 61150 19811 291507 1 684 12842 6224 60 90 24,37
18 13 114347 38007 500357 4 1809 26670 9476 48 21 42,26
19 12 212620 72343 1220742 7 4787 53693 13822 34 12 148
20 11 392995 137215 2462996 34 12639 104999 19505 38 10 610
21 11 786345 270642 5121875 54 21491 207248 41776 73 18 2499
22 10 1442274 512529 10255122 127 58852 399029 54478 43 10 8858
23 9 2620069 966357 20386490 481 158666 740594 66597 19 8 31064
Табл. 2 отображает поведение алгоритма при числе переменных п = 17. Видно, как растет число итераций Н и время решения Т при возрастании плотности единиц г. При этом распределение полученных импликант по рангам быстро изменяется в пользу импликант меньшего ранга.
Таблица 2
Поведение алгоритма при числе переменных п = 17
п г N С 5 $17 $16 $15 $14 $13 п Т
17 2 12285 7856 127689 2283 5283 290 0 0 2 0,27
17 4 20427 11117 177205 1147 8162 1802 6 0 2 0,53
17 6 28594 13761 215604 417 8406 4887 51 0 3 1,90
17 8 36507 15621 240722 135 6370 8883 233 0 3 4,04
17 10 44756 17348 263178 41 3864 12456 986 1 4 6,49
17 12 52999 18691 279341 6 1880 13899 2896 10 7 8,43
17 14 61150 19811 291507 1 684 12842 6224 60 90 24,52
Поведение алгоритма при максимально возможном для него числе переменных (п = 24) показано в табл. 3. При увеличении плотности единиц г на единицу время решения Т растет более чем вдвое, достигая 6,8 ч при г = 4.
Таблица 3
Поведение алгоритма при числе переменных n = 24
n r N C S Q24 Q 23 2 2 Q2 Q21 It T
24 1 1047350 685881 15982597 223163 446889 15829 0 2 1693,45
24 2 1571532 919682 21231157 148570 701045 70035 32 2 4068,76
24 3 2095590 1124293 25759214 85794 853387 184905 207 3 10695,15
24 4 2619724 1297946 29532155 44585 889335 362864 1162 3 24348,00
Заключение
В предлагаемом алгоритме минимизации булевых функций многих переменных (до 24) реализованы следующие идеи. 1) Роль элементарных операндов играют булевы векторы с 2n компонентами, представляющие произвольные булевы функции n переменных. 2) Строится булева матрица соседства N размером n х 2n, отображающая структуру характеристического множества M:. 3) С ее помощью быстро находятся простые импликанты четырех старших рангов, покрывающие часть множества M:. 4) Структура остатка представляется новой матрицей N, находятся новые импликанты высокого ранга и т. д. Итерации прекращаются, когда множество M1 становится пустым. 5) В заключение полученные импликанты доводятся до простых и устраняются дубли. Алгоритм реализуется эффективной программой, которая может оказаться полезной при решении систем булевых уравнений, верификации логических схем и решении других трудоемких задач теории булевых функций.
ЛИТЕРАТУРА
1. Закревский А. Д. Логический синтез каскадных схем. М., 1981.
2. Zakrevskij A. D. Parallel operations over neighbors in Boolean space //Proceedings of the Sixth International Conference CAD DD-07. Minsk, 2007. V. 2. P. 613.
3. Закревский A. Д. Программирование вычислений в многомерном булевом пространстве // 7-я Российская конф. с международным участием «Новые информационные технологии в исследовании сложных структур». Томск, 2008.