Поставим задачу: построить для произвольной булевой функции минимальные ДНФ. 3 страница
а) ;
б) .
◄ а)Преобразуемформулу, используя равносильность :
.
Поскольку на любом наборе и на любом наборе , то согласно определению , - фиктивные переменные. Переменная же - существенная, т.к. , .
б)выполнить самостоятельно.►
Обратите внимание. Если функция реализована формулой, в которую некоторая переменная не входит, то эта переменная фиктивная. Обратное утверждение неверно. Действительно, в упражнении 14 а) мы рассмотрели функцию, реализованную формулой, содержащую переменные , , однако эти переменные оказались фиктивными.
Упражнение 2.15. Выяснить, на скольких векторах 4-х мерного булева куба обращается в ноль функция: а) ; б) .
◄а)Функция обращается в ноль, если или . Равенства выполняются, только если все переменные равны единице. Равенства выполняются на таких наборах значений переменных , у которых одновременно не равны единице и одновременно не равны единице. При построении конкретного булевого вектора , отвечающего этим требованиям, будем сначала выбирать пару , а затем пару . Каждую из этих пар можно выбрать тремя способами (взять 0,0, или 0,1, или 1,0). Значит, согласно правилу произведения построить булев вектор, на котором оба слагаемых и равны нулю, можно девятью способами.
Таким образом, есть десять векторов, на которых функция обращается в нуль.
б)решить самостоятельно.►
Нормальные формы
2.2.1. Принцип двойственности
Определение. Функция, реализуемая формулой , называется двойственной к функции .
Функцию, двойственную к , обозначают , т.е. .
Упражнение 2.16.Используя определение, найти двойственные функции для дизъюнкции, конъюнкции и функций одной переменной.
◄ Пусть . Тогда .
Пусть . Тогда .
Пусть . Тогда .
Пусть . Тогда .
Пусть . Тогда .
Пусть . Тогда .►
Утверждение. Для любой функции выполняется равенство .
◄ .►
Обсудим, как найти двойственную функцию, если сама функция задана таблицей или вектором значений. Рассмотрим таблицы истинности для произвольной функции двух переменных , а также двойственной к ней функции :
Нетрудно заметить, что столбец значений функции можно получить из столбца значений функции , если действовать по следующему алгоритму:
1. столбец значений функции переписать в обратном порядке (т.е. число, стоящее в первой строке, записать в последнюю строку; число, стоящее во второй строке - в предпоследнюю строку и т.д.);
2. в получившемся в результате выполнения пункта 1 столбце значений каждое число заменить его отрицанием (0 заменить 1 и 1 заменить 0).
Аналогичного алгоритма для получения двойственной функции можно придерживаться и в случае любого числа аргументов.
Упражнение 2.17.Найти функции, двойственные данным:
а) ; б) ;
в) ; г) .
◄ а) .
б) .
в)и г) решите самостоятельно.►
Упражнение 2.18.Найти функции, двойственные данным:
а) ; б) .
◄ а) Вначале зададим функцию таблицей:
Далее: .
б)решите самостоятельно.►
Итак, если функция задана формулой, то, чтобы найти двойственную к функцию, можно вначале задать функцию вектором значений, а затем по вектору значений выписать вектор значений . Но можно действовать и по другому: строить формулу, реализующую , непосредственно по формуле, реализующей . Алгоритм такого построения дает принцип двойственности.
Принцип двойственности. Если формула реализует функцию , то формула, полученная из нее заменой символов функций на символы двойственных к ним функций , реализует функцию , двойственную к функции (эту формулу будем называть двойственной к и обозначать ).
Принцип двойственности удобен при нахождении двойственных функций в случае, если функция задана формулой. Особенно часто используют его следствие:
Поскольку , , , , , , то для получения формулы, двойственной к формуле , нужно в формуле заменить 0 на 1, 1 на 0, связку на связку , связку на связку .
Упражнение 2.19. Реализовать формулами функции, двойственные данным:
а) ; б) ; в) ; г) .
◄ а) .
Обратите внимание на следующее обстоятельство. В записи формулы, реализующей , конъюнкция, согласно соглашению о краткой записи формул, в скобки не взята. Записывая двойственную формулу, мы меняем конъюнкцию на дизъюнкцию. Но связка « » имеет меньший приоритет выполнения, чем « », поэтому, чтобы двойственная формула сохранила структуру исходной формулы, при переходе от конъюнкции к дизъюнкции нужно взять дизъюнкцию в скобки. В то же время при переходе от дизъюнкции к конъюнкции скобки можно опустить.
б) .
в)и г) решите самостоятельно.►
2.2.2. Реализация булевых функций в виде СДНФ и СКНФ.
Мы научились задавать вектором значений функцию, реализованную формулой. Для приложений важно уметь решать и обратную задачу, т.е. уметь реализовывать формулой функцию, заданную вектором значений. У этой задачи не одно решение, поскольку существуют семейства равносильных между собой формул.
Начнем с того, что научимся реализовывать функцию в виде совершенной дизъюнктивной нормальной формы.
Введем обозначение:
Теорема (о реализации функции в виде СДНФ). Если , то она может быть реализована формулой
. (*)
Формулу (*) называют совершенной дизъюнктивной нормальной формой или, сокращенно,СДНФ.
Согласно (*), чтобы записать СДНФ функции, нужно действовать так:
1) выбрать в таблице истинности функции все наборы значений переменных, на которых функция равна 1;
2) для каждого такого набора записать конъюнкцию, в которую войдут все переменные, причем, если значение переменной на данном наборе равно 0, то она войдет в конъюнкцию со знаком отрицания, а если – 1, то без знака отрицания;
3) записать дизъюнкцию всех выписанных в п. 2 конъюнкций.
Упражнение 2.20.Реализоватьфункции в виде СДНФ:
а) ; б) ; в) ; г) ; д) .
◄ а) – в) Зададим функции таблично и выпишем для них СДНФ.
;
;
.
г) Таблица истинности функции приведена в упражнении 2.18 б. Запишем СДНФ: .
д)решите самостоятельно. ►
Рассмотрим еще один способ реализации функции формулой.
Теорема (о реализации функции в виде СКНФ). Если , то она может быть реализована формулой
. (**)
Формулу (**), называют совершенной конъюнктивной нормальной формой или, сокращенно,СКНФ.
Согласно (**), чтобы записать СКНФ функции, нужно действовать так:
1) выбрать в ее таблице истинности все наборы значений переменных, на которых функция равна 0;
2) для каждого такого набора записать дизъюнкцию, в которую войдут все переменные, причем, если значение переменной на данном наборе равно 1, то она войдет в дизъюнкцию со знаком отрицания, а если – 1, то без знака отрицания;
3) записать конъюнкцию всех выписанных в п. 2 дизъюнкций.
Упражнение 2.21.Реализоватьфункции в виде СКНФ:
а) ; б) ; в) ; г) ; д) .
◄ а) – г) Опираясь на таблицы истинности функций (они приведены в упражнениях 20 и 18), запишем:
а) ;
б) ;
в) ;
г) .
д) решите самостоятельно. ►
§ 2.3. Минимизация булевых функций в классе ДНФ
Пусть задан алфавит переменных .
Определение. Формулу вида ( при , ) называют элементарной конъюнкцией ранга r над множеством X. Константа 1 рассматривается как элементарная конъюнкция ранга 0.
Например, формула - элементарная конъюнкция ранга 3 над множеством ; в то время как формула элементарной конъюнкцией не является.
Упражнение 2.22. а)Перечислите все элементарные конъюнкции ранга 3 над множеством , обращающиеся в единицу на наборе .
б)Перечислите все элементарные конъюнкции над множеством , обращающиеся в единицу на наборе .
◄ а) , , , ; б) , , , , , , ,1.►
Определение. Формулу вида ( при ), где через обозначены элементарные конъюнкции над множеством X, называют дизъюнктивной нормальной формой (ДНФ) над множеством X. Сумма рангов конъюнкций, входящих в ДНФ, называется сложностью ДНФ.
Например, - ДНФ сложности 6; - ДНФ сложности 4; - ДНФ сложности 3 над множеством .
Заметим, что формулы равносильны и, следовательно, реализуют одну и ту же функцию h. Делаем вывод: функция может быть реализована в виде ДНФ не единственным образом, причем ДНФ, реализующие функцию, могут иметь различную сложность.
Определение. ДНФ, имеющая по сравнению с другими ДНФ, реализующими данную функцию, наименьшую сложность, называется минимальной дизъюнктивной нормальной формой данной функции.
Так, для функции h (см. выше), реализуемой дизъюнктивными нормальными формами , , дизъюнктивная нормальная форма является минимальной, поскольку h зависит от переменных существенным образом и, значит, не может быть представлена ДНФ, содержащей менее трех букв.
Поставим задачу: построить для произвольной булевой функции минимальные ДНФ.
Заметим, что у этой задачи существует тривиальное решение. Дадим его пошаговое описание.
1. Строим все ДНФ над множеством . Их . Действительно, число различных элементарных конъюнкций равно , так как для каждой переменной имеется три возможности: присутствовать в конъюнкции, присутствовать с отрицанием и отсутствовать («пустой» конъюнкции сопоставлена константа 1). Каждая из конъюнкций, в свою очередь, может либо входить, либо не входить в ДНФ.
2. Отбираем из построенных ДНФ те, которые реализуют функцию .
3. Для отобранных ДНФ определяем сложности; ДНФ наименьшей сложности и есть искомые минимальные ДНФ функции .