Аналитические методы минимизации булевых функций

advertisement
Аналитические методы минимизации булевых функций.
Метод Квайна. Метод карт Карно. Простые импликанты.
Под литералом будем понимать булевскую переменную или ее отрицание.
Рассмотрим СДНФ некоторой функции. Если функция имеет К единиц, то число
литералов, входящих в СДНФ, равно произведению (К*n), где n – число переменных.
Будем называть минимизацией булевских выражений переход от СДНФ к
дизъюнктивной форме, в которой каждое слагаемое (дизъюнкт), представляет собой
конъюнкцию литералов, причем число литералов в форме должно являться минимально
возможным. В основе такой минимизации лежит операция склеивания, которая следует из
закона исключения третьего.
Всякую булеву функцию можно записать, причем единственным образом, в ДНФ,
то есть в виде дизъюнкции элементарных конъюнкций (суммы произведений). В связи с
этим можно ставить вопрос об отыскании для заданной функций такой ДНФ, которая
была бы наиболее простой по сравнению с ее другими ДНФ.
ДНФ называется минимальной, если она содержит по сравнению с другими
эквивалентными ей формами минимальное количество букв (при подсчете учитывается
каждое вхождение буквы в формулу).
В простейших случаях минимизацию функции можно осуществить, выписав все
ДНФ для этой функции и выбрав, из них минимальную. Однако такой примитивный
метод очень трудоемок, и мы рассмотрим ниже более оптимальные способы решения этой
задачи.
Элементарную конъюнкцию φк назовем импликантой булевой функции f, если не
существует такого двоичного набора переменных, при котором функция φ к принимает
значение 1, а функция f – значение 0, то ecть φk  f = f.
Для того чтобы проверить является ли заданная элементарная конъюнкция
импликантой функции f, следует всем переменным, которые входят в эту конъюнкцию без
знака отрицания, придать значение 1, а тем переменным, которые входят с отрицанием –
значение 0. Тогда элементарная конъюнкция будет иметь истинностное значение 1. После
этого следует, проверить, принимает ли функция f значение 1 при любых значениях
остальных переменных. В дальнейшем для упрощения записи булевых функций знаки
конъюнкции будем заменять знаками умножения или просто опускать.
Пример. Проверить, являются ли одночлены XX  и  2 XX  импликантами
булевой функции
f  X1X 2 X 3  X1X 2 X 3 .
Решение. Полагая в первом случае Х1 = 1, X2 = 1, имеем φ1 = l и φ2 = l и
f  1  1  X3  1  1  X3  X3  X3  1,
следовательно, φ2 – импликанта заданной функции.
Во втором случае полагаем X1 = 0, X2 = l. Тогда
φ2 = 1, а f  0  1  X 3  0  1  X 3  0 ,
следовательно, φ2 не является импликантой функции f.
Справедливы следующие утверждения:
1. Если f1 , f 2 ,...f n импликанты булевой функции f, то f1  f 2  ...  f n и
f1  f 2  ...  f n также являются ее импликантами.
2. Если функция f1  f 2  ...  f n есть импликанта функции f, то функции
f1 , f 2 ,...f n также являются импликантами функции f.
Элементарная конъюнкция, входящая в ДНФ булевой функции, называется ее
простой импликантой, если никакая ее часть не является импликантой этой функции.
Сокращенной ДНФ данной булевой функции называется ее ДНФ, составленная
только из простых импликант.
Для приведения булевой функции к сокращенной ДНФ используется, так
называемое правило склеивания. Оно заключается в следующем. Логическую сумму двух
элементарных конъюнкций, отличающихся только знаком отрицания над одной из
переменных, можно заменить одной элементарной конъюнкцией, которая является общей
частью рассматриваемых слагаемых, т.е.
FX  FX  F .
Например,
X1 X 2 X 3 X 4  X1 X 2 X 3 X 4  X 2 X 3 X 4
Используя операции поглощения и склеивания, его можно существенно упростить.
Часто используется неполное склеивание, при котором оба члена, участвовавших в
склеивании (или один из них), могут повторно склеиваться с другими оставшимися
членами СДНФ.
В процессе минимизации важно отыскать смежные конституенты, которые
отличаются только одним аргументом (в одну конституенту аргумент входит с инверсией,
а в другую – без нее).
Две смежные конституенты, склеиваясь, образуют импликанту рангом на единицу
ниже, чем исходные конституенты.
Используя, например, неполное склеивание последней коституенты в СДНФ
функции F1 последовательно с остальными, приходим к следующему выражению:
Процесс многоступенчатого склеивания приводит к импликантам, которые не
склеиваются с другими. Такие импликанты называют простыми. Форма записи булевой
функции в ДНФ, состоящая только из простых импликант, называется сокращенной
дизъюнктивной нормальной формой (Сокр ДНФ).
Для любой заданной функции сокращенная ДНФ является единственной. Однако
она может быть избыточной вследствие того, что некоторые простые импликанты этой
суммы покрываются совокупностями других слагаемых. Такие импликанты называют
лишними, и они могут быть удалены без нарушения равносильности формул.
Сокращенная ДНФ, из которой удалены все лишние импликанты, называется
тупиковой ДНФ
Исключение лишних импликант из сокращенной ДНФ проводится с помощью
правила поглощения: дизъюнкцию двух элементарных конъюнкций, из которых одна
полностью содержится и другой, можно заменить конъюнкцией, имеющей меньший ранг,
например, X  XF = X,
X1 X 2 X 3 X 4  X1 X 2  X1 X 2 .
Правила склеивания, и поглощения легко доказываются с помощью таблиц
истинности. Кроме этих правил, при минимизации функции могут быть использованы
любые известные равносильности.
Одним из методов отыскания лишних импликант является метод испытания
членов: чтобы испытать некоторый член функции, следует исключить его из Сокр ДНФ и
подставить в оставшееся выражение такие значения аргументов, которые обращают
исключенный член в единицу. Если при такой подстановке оставшееся выражение
окажется тождественно равным единице, то испытуемый член является лишним.
Найдем для примера тупиковую форму Сокр ДНФ
.
Испытаем член AC. AC = 1, если A = 1 и C = 1. Подставим в оставшееся
выражение
A = 1 и C = 1, получим
.
При B = 0 F(A, B, C) = 1·1 Ъ 0·0 = 1, но при
F(A, B, C) = 0·1 Ъ 0·0 = 0.
Следовательно, член AC не лишний.
Испытаем член BC, равный 1 при B = 0, C = 1. При этом
.
Последнее выражение равно 1 как при A = 1, так и при A = 0. Поэтому член
–
лишний.
Испытание члена
по этой же методике показывает, что он не является
лишним, в итоге тупиковая форма исходной функции имеет вид:
.
Пример. Найти минимальную ДНФ для функции
f X1X2X3X4  X1 X2X3 X4  X1 X2X3X4  X1X2X3 X4  X1 X2X3 X4 .
Решение. Склеивая первый и третий одночлены по переменной Х2, получим
Х1X3X4. Из первого и четвертого, а затем из второго и третьего слагаемых после
склеивания получим соответственно X1X2X3, X1X 2 X 3 и т.д. Окончательный список
импликант имеет вид
X1X 2 X 3 X 4
X1 X 2 X 3 X 4
X 2 X3 X 4
X1 X 2 X 3 X 4
X1X 3 X 4
X1X 3 X 4
X1 X 2 X 3 X 4
X1X 2 X 3
X1X 3
X1X 2 X 3 X 4
X1 X 2 X 3
В этом списке имеется два одночлена X1X3 и Х2Х3Х4, которые не поглощают
других одночленов из этого списка, следовательно, являются простыми импликантами.
Поэтому сокращенная ДНФ имеет вид
f X1X 3 X 2 X 3 X 4 ,
οна же является и минимальной
В общем случае процесс построения минимальных ДНФ может быть
охарактеризован следующей схемой.
СДНФ
Сокращенная
ДНФ
Тупиковая
ДНФ
Тупиковая
ДНФ
Тупиковая
ДНФ
Тупиковая
ДНФ
Сначала получают сокращенную ДНФ. Далее однозначный процесс переходит в
ветвящийся процесс построения всех тупиковых ДНФ и, наконец, из тупиковых ДНФ
выделяются минимальные. Самым трудоемким этапом этого процесса является
построение тупиковых ДНФ. Его можно немного упростить, заранее удалив часть членов
сокращенной ДНФ, не участвующих в построении тупиковых ДНФ и тем самым
сократить количество просматриваемых подмножеств
Проблема минимизации является важнейшей для технических приложений
логических функций и ей посвящено много работ, в которых предложены различные
алгоритмы решения этой задачи.
Правило «склеивания»:
x  x 1
x1 x 2 x 3 x 4    x1 x 2 x 3 x 4
  x1 x 2 x 4


x 3      x 3     x  x    x1 x 2 x 4
Основным методом минимизации логических функций, представленных в виде СДНФ
или СКНФ является операция попарного неполного склеивания и элементарного
поглощения. Операция попарного склеивания осуществляется между двумя термами
(членами), содержащими одинаковые переменные, вхождения которых (прямые и
инверсные) совпадают для всех переменных, кроме одной. В этом случае все переменные,
кроме одной, можно вынести за скобки, а оставшиеся в скобках прямое и инверсное
вхождение одной переменной подвергнуть склейке. Например:
Аналогично для КНФ:
Возможность поглощения следует из очевидных равенств
Таким образом, главной задачей при минимизации СДНФ и СКНФ является поиск термов,
пригодных к склейке с последующим поглощением, что для больших форм может
оказаться достаточно сложной задачей.
Геометрическое представление логических функций
Обозначим через Еn множество всех наборов (α1,..., αη), состоящих из чисел ноль и
единица. Множество Еn называется n-мерным кубом, а набор (α1, ..., αη) - вершинами куба.
В трехмерном кубе Е3 наборы (0,0,1) и (0,0,0) образуют одномерную (n = 3, r = 2)
грань (ребро), а наборы (1,0,0), (1,0,1), (1,1,0), (1,1,1) - двухмерную грань.
Пусть f(X1,X2,…,Xn) - произвольная булева функция. Ей сопоставляется в
соответствие подмножество Νf вершин куба Еn, таких что (α1, ..., αη)  Nf тогда и только
тогда, когда f(α1, ..., αη) = l. Очевидно, что по подмножеству Nf исходная функция f(X1, X2.,
... , Χn) восстанавливается однозначно. Таким образом геометрический способ задания
булевой функции заключается в задании множества вершин n-мерного куба Еn, в которых
данная функция истинна.
Напомним, что для любой булевой функции существует ее представление в СДНФ.
Причём в алгоритме построения СДНФ используются только те наборы значений, при
которых функция равна единице. Это позволяет проинтерпретировать геометрическое
представление функции следующим образом. Рассмотрим трёхмерный куб и занумеруем
вершины.
5(001)
6(101)
2(111)
7(000)
8(100)
1(011)
3(010)
4(110)
Тогда его грани (двумерные подкубы) можно рассматривать как
2,4,6,8X1
1,3,5,7X1
1,2,3,4X 2
1,2,5,6X 3
5,6,7,8X 2
3,4,7,8X 3
Ребрами данного куба (одномерными подкубами) будут, например,
4,8X1 X3 ,1,2X 2 X3 ,7,5X1 X 2 , и т.д.
Пример. Дана модель куба с помеченными вершинами. Составить СДНФ для
данной булевой функции
Решение. Вершине 1 соответствует конъюнкция X1X 2 X 3 , вершинам 3 и 4
конъюнкция X1X 2 X 3 и X1X 2 X 3 соответственно; вершинам 5 и 6 - конъюнкции X1 X 2 X 3
и X1 X 2 X 3 . Следовательно, искомая СДНФ имеет вид
X1X 2 X3 X1X 2 X3 X1X 2 X3 X1 X 2 X3 X1 X 2 X3 .
Заметим, что для функций, зависящих от четырёх и более переменных,
геометрическое представление применяется очень редко, т.к. трудно построить наглядную
модель n-мерного куба при n > 3. Поэтому в этом и следующих параграфах мы будем
рассматривать только булевы функции трех аргументов, хотя все изложенное справедливо
для других функций, зависящих от большого числа аргументов.
Перейдем теперь к геометрической постановке задачи минимизации булевых
функций.
Метод Карно:
Карта Карно́ — графический способ минимизации переключательных (булевых) функций,
обеспечивающий относительную простоту работы с большими выражениями и
устранение потенциальных гонок. Представляет собой операции попарного неполного
склеивания и элементарного поглощения. Карты Карно были изобретены в 1952 Эдвардом
В. Вейчем и усовершенствованы в 1953 Морисом Карно, физиком из «Bell Labs», и были
призваны помочь упростить цифровые электронные схемы.
Карты Карно рассматриваются как перестроенная соответствующим образом таблица
истинности функции.
В карту Карно булевы переменные передаются из таблицы истинности и
упорядочиваются с помощью кода, в котором каждое следующее число отличается от
предыдущего только одним разрядом.
Булевы функции N переменных, представленные в виде СДНФ или СКНФ могут иметь в
своём составе 2N различных термов. Все эти члены составляют некоторую структуру,
топологически эквивалентную N–мерному кубу, причём любые два терма, соединённые
ребром, пригодны для склейки и поглощения.
На рисунке изображена простая таблица истинности для функции из двух переменных,
соответствующий этой таблице 2-мерный куб (квадрат), а также 2-мерный куб с
обозначением членов СДНФ и таблица для группировки термов:
В случае функции трёх переменных приходится иметь дело с трёхмерным кубом. Это
сложнее и менее наглядно, но технически возможно. На рисунке в качестве примера
показана таблица истинности для булевой функции трёх переменных и соответствующий
ей куб.
Как видно из рисунка, для трёхмерного случая возможны более сложные конфигурации
термов. Например, четыре терма, принадлежащие одной грани куба, объединяются в один
терм с поглощением двух переменных:
В общем случае можно сказать, что 2K термов, принадлежащие одной K–мерной грани
гиперкуба, склеиваются в один терм, при этом поглощаются K переменных.
Для упрощения работы с булевыми функциями большого числа переменных был
предложен следующий удобный приём. Куб, представляющий собой структуру термов,
разворачивается на плоскость как показано на рисунке. Таким образом, появляется
возможность представлять булевы функции с числом переменных больше двух в виде
плоской таблицы. При этом следует помнить, что порядок кодов термов в таблице (00 01
11 10) не соответствует порядку следования двоичных чисел, а клетки, находящиеся в
крайних столбцах таблицы, соседствуют между собой.
Аналогичным образом можно работать с функциями четырёх, пяти и более переменных.
Примеры таблиц для N=4 и N=5 приведены на рисунке. Для этих таблиц следует помнить,
что соседними являются клетки, находящиеся в соответственных клетках крайних
столбцов и соответственных клетках верхней и нижней строки. Для таблиц 5 и более
переменных нужно учитывать также, что квадраты 4х4 виртуально находятся друг над
другом в третьем измерении, поэтому соответственные клетки двух соседних квадратов
4х4 являются соседними, и соответствующие им термы можно склеивать.
Карта Карно может быть составлена для любого количества переменных, однако удобно
работать при количестве переменных не более пяти. По сути Карта Карно — это таблица
истинности составленная в 2-х мерном виде. Верхняя строка является соседней с нижней,
а правый столбец соседний с левым, т.о. вся Карта Карно сворачивается в фигуру тор
(бублик). На пересечении строки и столбца проставляется соответствующее значение из
таблицы истинности. После того как Карта заполнена, можно приступать к минимизации.
Если необходимо получить минимальную ДНФ, то в карте рассматриваем только те
клетки которые содержат единицы, если нужна КНФ, то рассматриваем те клетки которые
содержат нули. Сама минимизация производится по следующим правилам (на примере
ДНФ):
 объединяем смежные клетки содержащие единицы в область, так чтобы
одна область содержала 2n (n – целое число) клеток (помним про то что
крайние строки и столбцы являются соседними между собой), в области не
должно находиться клеток содержащих нули;
 область должна быть как можно больше, а кол-во областей как можно
меньше;
 области могут пересекаться;
 возможно несколько вариантов накрытия.
Далее берём первую область и смотрим, какие переменные не меняются в пределах этой
области, выписываем конъюнкцию этих переменных, если неменяющаяся переменная
нулевая, проставляем над ней инверсию. Берём следующую область, выполняем то же
самое что и для первой, и т. д. для всех областей. Конъюнкции областей объединяем
дизъюнкцией.
Рассмотрим первый случай для трех переменных:
x1
x2
x3
f
0
0
0
0
0
0
1
0
0
1
0
1
0
1
1
0
1
0
0
1
1
0
1
1
1
1
0
0
1
1
1
1
Получим: f=x1x3+x1
+
x2+
x2
,
Рассмотрим второй случай:
f=x3+x1
+
x2.
Общее правило минимизации:
1. Для данной функции построить карту Карно
2. Если в таблице стоит «прямоугольник», состоящий из четырех единиц (с учетом
склейки краев), эти единицы покрываются одним литералом, являющимся общим для
четырех ячеек.
3. Непокрытые единицы, входящие в склеиваемые пары, покрываются двумя
литералами.
4. Единицы, которые не склеиваются ни с одной единицей, покрываются тремя
литералами.
Замечание: при покрытии единиц следует учитывать закон поглощения.
Карты Карно для не полностью определенных функций:
Иногда некоторые сочетания аргументов для цифрового устройства несущественны, так
как они не могут возникать на входе устройства, тогда на соответствующих местах
карты Карно мы можем поставить и 0, и 1, более удобный вариант для минимизации.
Метод неопределенных коэффициентов:
Метод применим для минимизации функций алгебры логики от любого числа
переменных.
Исходную логическую функции можно записать в виде логической суммы
конъюнктивных членов с неопределенными коэффициентами, которые могут быть равны
либо 0, либо 1. Эти конъюнктивные члены представляют собой возможные комбинации,
составленные из переменных и их отрицаний. Неопределенные коэффициенты,
фигурирующие в конъюнктивных членах, принято снабжать двумя наборами индексов –
нижним и верхним. Нижний набор указывает на то, из каких переменных составлена
конъюнкция, а верхний – о том, взята переменная или ее отрицание.
Полученные таким образом соотношения для булевой функции с неопределенными
коэффициентами вычисляют на всех двоичных наборах, что приводит к системы
линейных уравнений относительно неопределенных коэффициентов. При минимизации
конкретной булевой функции в правые части написанных уравнений подставляют
значения этой функции и среди решений полученной системы отбирают те, которые
содержат минимальное количество переменных.
Алгоритм определения коэффициентов:
1. Исходное уравнение разбить на систему уравнений, равных числу строк в
таблице истинности.
2. Напротив каждого выражения поставить соответствующее значение функции.
k
3. Выбрать строку, в которой значение функции f  0 и приравнять все i к нулю.
4. Просмотреть строки, где функция имеет единичное значение, и вычеркнуть все
коэффициенты, встречающиеся в нулевых строках.
5. Проанализировать оставшиеся коэффициенты в единичных строках.
k 1
6. Используя правило, что дизъюнкция равна 1 если хотя бы один из i
,
выбрать min-термы минимального ранга. Причем отдавать предпочтение коэффициентам,
встречающимся в нескольких уравнениях одновременно.
7. Записать исходный вид функции.
Рассмотрим случай трех переменных. Булева функция в ДНФ может быть
представлена в виде всевозможных конъюнктивных членов, которые могут входить в
ДНФ:
11
10
01
f  x1, x2 , x3   k11x1  k10 x1  k21 x2  k20 x2  k31x3  k30 x3  k12
x1x2  k12
x1x2  k12
x1x2 
00
11
10
01
00
11
10
01
 k12
x1x2  k13
x1x3  k13
x1x3  k13
x1x3  k13
x1x3  k 23
x2 x3  k 23
x2 x3  k 23
x2 x3 
00
111
110
101
100
011
 k23
x2 x3  k123
x1x2 x3  k123
x1x2 x3  k123
x1x2 x3  k123
x1x2 x3  k123
x1x2 x3 
010
001
000
 k123
x1x2 x3  k123
x1x2 x3  k123
x1x2 x3 ,
где k{0,1} - коэффициенты. Метод заключается в подборе коэффициентов таким
образом, чтобы получаемая ДНФ была минимальной.
Если теперь задать всевозможные значения переменных от 000 до 111, то получим
n
3
2 (2 =8) уравнений для определения коэффициентов k:
00
00
00
000
;
f  0,0,0  k10  k20  k30  k12
 k13
 k23
 k123
00
01
01
001
;
f  0,0,1  k10  k20  k31  k12
 k13
 k23
 k123
01
00
10
010
;
f  0,1,0  k10  k21  k30  k12
 k13
 k23
 k123
01
01
11
011
;
f  0,1,1  k10  k21  k31  k12
 k13
 k23
 k123
10
10
00
100
;
f 1,0,0  k11  k20  k30  k12
 k13
 k23
 k123
10
11
01
101
;
f 1,0,1  k11  k20  k31  k12
 k13
 k23
 k123
11
10
10
110
;
f 1,1,0  k11  k21  k30  k12
 k13
 k23
 k123
11
11
11
111
.
f 1,1,1  k11  k21  k31  k12
 k13
 k23
 k123
Рассматривая наборы, на которых функция принимает нулевое значение,
определяют коэффициенты, которые равны 0, и вычеркивают их из уравнений, в правой
части которых стоит 1. Из оставшихся коэффициентов в каждом уравнении к единице
приравнивают по одному коэффициенту, определяющему конъюнкцию наименьшего
ранга. Остальные коэффициенты приравнивают к 0. Итак, единичные коэффициенты k
определяют соответствующую минимальную форму.
Пример. Минимизировать заданную функцию
f  x1, x2 , x3   x1x2 x3  x1x2 x3  x1x2 x3  x1x2 x3  x1x2 x3 ,
если известны значения:
f  0,0,0   1 ; f  0,0,1  0 ; f  0,1,0  0 ; f  0,1,1  0 ;
f 1,0,0   1 ; f 1,0,1  1; f 1,1,0   0 ; f 1,1,1  1 .
Решение.
00
00
00
000
f  0,0,0   k10  k20  k30  k12
 k13
 k23
 k123
=1;
00
01
01
001
f  0,0,1  k10  k20  k31  k12
 k13
 k23
 k123
=0;
01
00
10
010
f  0,1,0   k10  k21  k30  k12
 k13
 k23
 k123
=0;
01
01
11
011
f  0,1,1  k10  k21  k31  k12
 k13
 k23
 k123
=0;
10
10
00
100
f 1,0,0   k11  k20  k30  k12
 k13
 k23
 k123
=1;
10
11
01
101
=1;
f 1,0,1  k11  k20  k31  k12
 k13
 k23
 k123
11
10
10
110
=1;
f 1,1,0   k11  k21  k30  k12
 k13
 k23
 k123
11
11
11
111
f 1,1,1  k11  k21  k31  k12
 k13
 k23
 k123
=1.
После вычеркивания нулевых коэффициентов получим:
00
000
k23
 k123
=1;
10
10
00
100
k11  k12
 k13
 k23
 k123
=1;
10
11
101
k11  k12
 k13
 k123
=1;
11
10
110
k11  k12
 k13
 k123
=1;
11
11
111
k11  k12
 k13
 k123
=1.
1
Приравняем к единице коэффициент k1 , соответствующий конъюнкции
наименьшего ранга и обращающий четыре последних уравнения в 1, а в первом уравнении
00
целесообразно приравнять к 1 коэффициент k 23 . Остальные коэффициенты
приравнивают к 0.
Ответ: вид минимизированной функции f  x1, x2 , x3   x1  x2 x3 .
Следует отметить, что метод неопределенных коэффициентов эффективен, когда
число переменных невелико и не превышает 5-6.
Пример 2. f x1 , x2 , x3   x1 x2 x3  x1 x2 x3  x1 x2 x3  x1 x2 x3
1=f(1, 1, 1)=
1=f(1, 1, 0)=
1=f(1, 0, 1)=
1=f(1, 0, 0)=
0=f(0, 1, 1)=
0=f(0, 1, 0)=
0=f(0, 0, 1)=
0=f(0, 0, 0)=
На отмеченных 5, 6, 7 наборах функций равна нулю, поэтому и все K=0. Но эти же
коэффициенты входят и в другие уравнения, поэтому их нужно удалить. Получим:
Получим в результате конечную функцию: f(x1, x2, x3)=x1
Метод Квайна
Теорема. Если в СДНФ функции алгебры логики произвести всевозможные
операции неполного склеивания, а затем всевозможные операции элементарного
поглощения, то полученная форма функции будет сокращенной.
Метод Квайна основывается на применении двух основных соотношений.
Соотношение склеивания FX  F X  FX  F X  F где F - любое элементарное
произведение.
Соотношение поглощения X  XF = X
Справедливость обоих соотношений легко проверяется. Суть метода заключается в
последовательном выполнении всех возможных склеиваний и затем всех поглощений, что
приводит к сокращенной ДНФ. Метод применим к CДНФ. Из соотношения поглощения
следует, что произвольное элементарное произведение поглощается любой его частью.
Для доказательства достаточно показать, что произвольная простая импликанта р =
xi1xi2 ... xin может быть получена. В самом деле, применяя к р операцию развертывания
(обратную операции склеивания):
A = A (x v /x) = Ax v A/x
по всем недостающим переменным xi^(k+l), ..., Xi^n исходной функции f, получаем
совокупность S конституент единицы. При склеивании всех конституент из S получим
импликанту р. Последнее очевидно, поскольку операция склеивания обратна операции
развертывания. Множество S конституент обязательно присутствует в совершенной ДНФ
функции f поскольку р - ее импликанта.
x4x3x2x1
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
f
0
1
0
1
0
1
0
1
0
0
0
0
0
0
1
1
Пример. Пусть имеется булева функция, заданная таблицей истинности. Ее СДНФ имеет
вид
f = /x1/x2/x3x4 v /x1/x2x3x4 v /x1x2/x3x4 v /x1x2x3x4 v x1x2x3/x4 v x1x2x3x4.
Для удобства изложения пометим каждую конституенту единицы из СДНФ
функции f каким-либо десятичным номером (произвольно). Выполняем склеивания.
Конституента 1 склеивается только с конституентой 2 (по переменной x 3) и с
конституентой 3 (по переменной х2), конституента 2 с конституентой 4 и т. д. В результате
получаем
1 - 2: /x1/x2x4;
1 - 3: /x1/x3x4;
2 - 4: /x1x3x4;
3 - 4: /x1x2x4;
4 - 6: x2x3x4;
5 - 6: x1x2x3.
Заметим, что результатом склеивания является всегда элементарное произведение,
представляющее собой общую часть склеиваемых конституент. Далее производим
склеивания
получаемых
элементарных
произведений.
Склеиваются только те произведения, которые содержат одинаковые переменные. Имеет
место два случая склеивания:
/x1/x2x4 v
/x1x2x4 =
/x1/x2x4 v
/x1x2x4 v
/x1x4;
/x1/x3x4 v /x1x3x4 = /x1/x3x4 v /x1x3x4 v /x1x4,
с появлением одного и того же элементарного произведения /x1x4. Дальнейшие
склеивания невозможны. Произведя поглощения (из полученной ДНФ вычеркиваем все
поглощаемые элементарные произведения), получим сокращенную ДНФ:
x2x3x4 v x1x2x3 v /x1x4.
Переходим ко второму этапу. Для получения минимальной ДНФ необходимо
убрать из сокращенной ДНФ все лишние простые импликанты. Это делается с помощью
специальной импликантной матрицы Квайна. Строки такой матрицы отмечаются
простыми импликантами булевой функции, т. е. членами сокращенной ДНФ, а столбцы конституентами
единицы,
т.
е.
членами
СДНФ
булевой
функции.
Пример (продолжение).
Импликантная
матрица
имеет
вид
(табл.
4.1.2).
Простые
Конституенты единицы
импликанты /x1/x2/x3x4 /x1/x2x3x4 /x1x2/x3x4 /x1x2x3x4 x1x2x3/x4 x1x2x3x4
/x1x4
x2x3x4
x1x2x3
X
X
X
X
X
X
Х
Х
Как уже отмечалось, простая импликанта поглощает некоторую конституенту единицы,
если является ее собственной частью. Соответствующая клетка импликантной матрицы на
пересечении строки (с рассматриваемой простой импликантой) и столбца (с
конституентой единицы) отмечается крестиком. Минимальные ДНФ строятся по
импликантной матрице следующим образом:
1.
ищутся столбцы импликантной матрицы, имеющие только один крестик.
Соответствующие этим крестикам простые импликанты называются базисными и
составляют так называемое ядро булевой функции. Ядро обязательно входит в
минимальную ДНФ.
2.
рассматриваются различные варианты выбора совокупности простых
импликант, которые накроют крестиками остальные столбцы импликантной матрицы, и
выбираются варианты с минимальным суммарным числом букв в такой совокупности
импликант.
Пример (продолжение). Ядром нашей функции являются импликанты x1x2x3; /x1x4.
Импликанта x2x3x4 - лишняя, так как ядро накрывает все столбцы импликантной матрицы.
Поэтому функция имеет единственную тупиковую и минимальную ДНФ:
f = x1x2x3 v /x1x4
Следует отметить, что число N крестиков в одной строке всегда является степенью
2. Более того, читатель может легко убедиться в том, что N = 2n-k где k - число букв,
содержащихся в простой импликанте. Заметим также, что используя различные
соотношения, можно расширить область применения метода Квайна за пределы
совершенной ДНФ."
Метод Квайна в модификации Макласки:
Алгебраический метод известен как метод Мак-Класски, модифицировавшего в
1956 году метод Квайна.
Метод представляет собой формализованный на этапе нахождения простых
импликант метод Квайна. Формализация производится следующим образом:
1. Все конституанты единицы из СДНФ булевой функции f записываются их двоичными
номерами.
2. Все номера разбиваются на непересекающиеся группы. Признак образования i-й
группы: i единиц в каждом двоичном номере конституенты единицы.
3. Склеивание производят только между номерами соседних групп. Склеиваемые номера
отмечаются каким-либо знаком (зачеркиванием).
4. Склеивания производят всевозможные, как и в методе Квайна. Неотмеченные после
склеивания номера являются простыми импликантами.
Нахождение минимальных ДНФ далее производится по импликантной матрице,
как и в методе Квайна.
1. Привести булеву функцию к СДНФ.
2. В СДНФ произвести все возможные склеивания. Полученная после этого ДНФ
является сокращённой, но среди простых импликант могут оказаться лишние.
3. Перейти от сокращённой ДНФ к минимальной, т.е. исключить лишние
импликанты. Для этого рекомендуется воспользоваться импликантной матрицей, в
которой каждой строке соответствует простая импликанта, а каждому столбцу –
конституента (элементарная конъюнкция, содержащая все переменные) СДНФ заданной
функции. Эта матрица заполняется следующим образом - под конституентами, в которые
входит данная простая импликанта, ставится метка "1" Для нахождения минимального
покрытия функции необходимо удалить из таблицы некоторые лишние простые
импликанты. С этой целью реализуется следующий алгоритм.
1. Выделение ядра Квайна. Если в каком-либо столбце импликантной матрицы
имеется только одна 1, то импликанта, находящаяся в соответствующем столбце, не
является лишней и должна быть включена в минимальное покрытие функции. Такие
импликанты называются существенными, а их совокупность называют ядром Квайна.
Вычёркивая строки, в которых находятся существенные импликанты, и столбцы,
покрываемые этими импликантами, получаем матрицу меньших размеров. Если в ней
имеются столбцы, содержащие по одной 1, то операцию выделения существенных
импликант следует повторить.
2 Сжатие по столбцам или строкам. Из матрицы вычёркивается тот столбец, в
который полностью входит какой-либо другой столбец и та строка, которая полностью
покрывается другой.
После выполнения всех указанных действий в матрице останутся только те
простые импликанты, которые входят в минимальное покрытие функции. Соединив эти
импликанты и найденные ранее существенные импликанты знаками дизъюнкций,
получим минимальную ДНФ заданной функции.
Для простоты рассмотрим функции четырех переменных.
Минимизировать булеву функцию
f X1 X 2 X3 X 4 X1 X 2 X3X 4 X1 X 2 X3 X 4 X1X 2 X3 X 4 
X1X 2 X3X 4 X1X 2 X 3X 4 X1 X 2 X 3 X 4 X1 X 2 X 3 X 4 
X1X 2 X3 X 4 X1X 2 X3 X 4 X1X 2 X3X 4 .
Функция задана в CДНФ, поэтому займемся сразу отысканием простых импликант,
проводя операцию склеивания. Для этого представим каждую элементарную конъюнкцию
двоичным набором, ставя на k-ом месте 0, если Хk входит с отрицанием, 1 – если без
отрицания и знак "–", если эта переменная не входит в конъюнкцию/ Тогда функция
примет вид:
00000001001001000101011110001010110011101111.
Разобьем эти наборы на классы, в каждом из которых содержатся наборы с
одинаковым числом единиц и расположим их в порядке возрастания суммы всех чисел
набора.
0000
0001
0101
0111
1111
0010
1010
0100
1100
1110
1000
Для исключения переменных по правилу склеивания сравним все наборы всех
смежных классов. Если при этом какая-либо переменная исключается, то в разряд,
соответствующий этой переменной, записываем прочерк. Например, двоичные наборы
0100 и 0101 образуют набор 010–. Все полученные наборы опять разбиваем на классы.
Объединяем снова наборы из двух смежных классов, причём сравнению подлежат только
те, у которых прочерк находится в одном и том же разряде, получаем новый набор
импликант. Нетрудно убедиться, что дальнейшее объединение наборов невозможно,
следовательно, все полученные импликанты – простые.
0*0*
1**0
*111
*0*0
1**0
111*
0*0*
**00
*0*0
**00
Построим импликантную матрицу.
0000
0001
0*0*
1
1
*0*0
1
**00
1
0010
0100
0101
1
1
0111
1
1
1000
1010
1
1
1
1**0
1
*111
1100
1110
1
1
1
1
1
111*
1111
1
1
1
Выделяя столбцы, содержащие по одной единице, находим существенные
импликанты, образующие ядро Квайна: 0–0– –0–0. При этом первая из них является
существенной для 0000, 0001, 0100, 0101, а вторая – для 0000, 0010, 1000, 1010.
Вычёркивая столбцы с этими конституентами и строки с существенными импликантами,
получим табл. б.
0111
1100
**00
1
1**0
1
*111
1110
1111
1
1
1
111*
1
1
В этой таблице нет столбцов, содержащих только одну единицу, следовательно
существенных импликант в этой таблице нет и ядро Квайна состоит из двух импликант,
найденных выше: 0–0– и –0–0.
Переходим к операциям сжатия по строкам и столбцам. Вторая строка табл. 3 б
поглощает первую, а четвёртая – третью, поэтому первую и третью строки можно
вычеркнуть (табл. 3 в).
0111
1**0
*111
1
1100
1110
1
1
1111
1
Таким образом, заданная функция имеет четыре простых импликанты: 0–0–, –0–0,
1––0 и –111. Объединяя их знаком дизъюнкции, получаем минимальную ДНФ в виде
f X1 X 3 X 2 X 4 X1 X 4 X 2 X 3X 4 .
Алгоритм Квайна позволяет получать минимальные дизъюнктивные нормальные
формы заданных функций Однако в ряде случаев минимальные конъюнктивные
нормальные выражения оказываются "меньше" дизъюнктивных, поэтому при решении
задач минимизации желательно получить не только дизъюнктивные, но и конъюнктивные
нормальные формулы и выбрать из них наименьшее. Методы получения минимальных
конъюнктивных выражений двойственны рассмотренным выше методам и мы не будем на
них останавливаться.
Download