ДНФ — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
м (переименовал СДНФ в ДНФ: >_<)
Строка 15: Строка 15:
 
Пример ДНФ:
 
Пример ДНФ:
 
<tex>f(x,y) = (x \land y) \lor (y \land \overline{z})</tex>
 
<tex>f(x,y) = (x \land y) \lor (y \land \overline{z})</tex>
 
ДНФ может быть преобразована к эквивалентной ей КНФ путём раскрытия скобок по правилу: <tex>a\lor b c\to (a \lor b)(a \lor c)</tex>, которое выражает дистрибутивность дизъюнкции относительно конъюнкции. После этого необходимо в каждой дизъюнкции удалить повторяющиеся переменные или их отрицания, а также выбросить из конъюнкции все дизъюнкции, в которых встречается переменная вместе со своим отрицанием. При этом результатом не обязательно будет СКНФ, даже если исходная ДНФ была СДНФ. Точно также можно всегда перейти от КНФ к ДНФ. Для этого следует использовать правило <tex>a (b\lor c)\to a b\lor a c</tex>, выражающее дистрибутивность конъюнкции относительно дизъюнкции. Результат нужно преобразовать описанным выше способом, заменив слово «дизъюнкция» на «конъюнкция» и наоборот.
 
 
Например ДНФ <tex>\to</tex> КНФ: <tex> (x \land \overline{z}) \lor y = (x \lor y) \land (y \lor \overline{z}) </tex>
 
 
Например КНФ <tex>\to</tex> ДНФ: <tex>(x \lor y) \land (y \lor \overline{z}) = (x \land y) \lor y \lor (x \land \overline{z}) \lor (y \land \overline{z}) = y \land (x \lor 1 \lor \overline{z}) \lor (x \land \overline{z}) = (x \land \overline{z}) \lor y</tex>
 
  
 
== СДНФ ==
 
== СДНФ ==
Строка 67: Строка 61:
 
|+
 
|+
 
|-align="center" bgcolor=#EEEEFF
 
|-align="center" bgcolor=#EEEEFF
| x || y || z || <tex>med(x,y,z)</tex>
+
| x || y || z || <tex> \langle x,y,z \rangle </tex>
 
|-align="center" bgcolor=#F0F0F0
 
|-align="center" bgcolor=#F0F0F0
 
| 0 || 0 || 0 || 0
 
| 0 || 0 || 0 || 0
Строка 91: Строка 85:
 
|+
 
|+
 
|-align="center" bgcolor=#EEEEFF
 
|-align="center" bgcolor=#EEEEFF
| x || y || z || <tex>med(x,y,z)</tex> ||  
+
| x || y || z || <tex> \langle x,y,z \rangle </tex> ||  
 
|-align="center" bgcolor=#F0F0F0
 
|-align="center" bgcolor=#F0F0F0
 
| 0 || 0 || 0 || 0 ||
 
| 0 || 0 || 0 || 0 ||
Строка 112: Строка 106:
 
3. Все полученные конъюнкции связываем операциями дизъюнкции.
 
3. Все полученные конъюнкции связываем операциями дизъюнкции.
 
                                                                    
 
                                                                    
<tex>med(x,y,z) = (x \land y \land z) \lor (\overline{x} \land y \land z) \lor (x \land \overline{y} \land z) \lor (x \land y \land \overline{z})</tex>
+
<tex> \langle x,y,z \rangle = (x \land y \land z) \lor (\overline{x} \land y \land z) \lor (x \land \overline{y} \land z) \lor (x \land y \land \overline{z})</tex>
  
 
==Примеры СДНФ для некоторых функций==
 
==Примеры СДНФ для некоторых функций==

Версия 06:06, 21 декабря 2011

ДНФ

Определение:
Простой конъюнкцией или конъюнктом называется конъюнкция одной или нескольких переменных или их отрицаний, причём каждая переменная встречается не более одного раза.

Элементарная конъюнкция

  • правильная, если в неё каждая переменная входит не более одного раза (включая отрицание);
  • полная, если в неё каждая переменная (или её отрицание) входит ровно 1 раз;
  • монотонная, если она не содержит отрицаний переменных.


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

Пример ДНФ: f(x,y)=(xy)(y¯z)

СДНФ

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

Пример СДНФ: f(x,y,z)=(x¯yz)(xy¯z)


Теорема:
Для любой булевой функции f(x), не равной тождественному нулю, существует СДНФ, ее задающая.
Доказательство:

Для любой булевой функции выполняется следующее соотношение, называемое разложением Шеннона.

f(x)=¯xif(x1,..,xi1,0,xi+1,..,xn)xif(x1,..,xi1,1,xi+1,xn)

Данное соотношение легко проверить подстановкой всевозможных значений xi (0 и 1). Эта формула позволяет выносить xi за знак функции. Последовательно вынося x1, x2,.., xn за знак f(x), получаем следующую формулу : f(x)=¯x1¯x2...¯xn1¯xnf(0,0,...,0,0)  

¯x1¯x2...¯xn1xnf(0,0,...,0,1)  

...

  x1x2...xn1¯xnf(1,1,...,1,0)  

x1x2...xn1xnf(1,1,...,1)

Т.к применение данного соотношения к каждой из переменных увеличивает количество дизъюнктивных членов в два раза, то для функции от n переменных мы имеем 2n дизъюнктивных членов. Каждый из них соответствует значению функции на одном из 2n возможных наборов значений n переменных. Если на некотором наборе f(x)=0, то весь соответствующий дизъюнктивный член также равен нулю и из представления данной функции его можно исключить. Если же f(x)=1, то в соответствующем дизъюннктивном члене само значение функции можно опустить. В результате для произвольной функции была построена СДНФ.

Алгоритм построения СДНФ по таблице истинности

  1. В таблице истинности отмечаем те наборы переменных, на которых значение функции равно 1.
  2. Для каждого отмеченного набора записываем конъюнкцию всех переменных по следующему правилу: если значение некоторой переменной есть 1, то в конъюнкцию включаем саму переменную, иначе ее отрицание.
  3. Все полученные конъюнкции связываем операциями дизъюнкции.

Пример построения СДНФ

1. В таблице истинности отмечаем те наборы переменных, на которых значение функции равно 1.

x y z x,y,z
0 0 0 0
0 0 1 0
0 1 0 0
0 1 1 1
1 0 0 0
1 0 1 1
1 1 0 1
1 1 1 1

2. Для каждого отмеченного набора записываем конъюнкцию всех переменных по следующему правилу: если значение некоторой переменной есть 1, то в конъюнкцию включаем саму переменную, иначе ее отрицание.

x y z x,y,z
0 0 0 0
0 0 1 0
0 1 0 0
0 1 1 1 (¯xyz)
1 0 0 0
1 0 1 1 (x¯yz)
1 1 0 1 (xy¯z)
1 1 1 1 (xyz)

3. Все полученные конъюнкции связываем операциями дизъюнкции.

x,y,z=(xyz)(¯xyz)(x¯yz)(xy¯z)

Примеры СДНФ для некоторых функций

Стрелка Пирса: xy=(¯x¯y)

Исключающее или: xyz=(¯x¯yz)(¯xy¯z)(x¯y¯z)(xyz)

Ссылки