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

Материал из Викиконспекты
Перейти к: навигация, поиск
(Новая страница: «==Канонические формы логических формул== Любая логическая формула задает некоторую [[булев…»)
 
м (rollbackEdits.php mass rollback)
 
(не показано 70 промежуточных версий 14 участников)
Строка 1: Строка 1:
==Канонические формы логических формул==
+
== ДНФ ==
Любая логическая формула задает некоторую [[булева функция|булеву функцию]]. Но для всякой [[булева функция|булевой функции]] можно привести бесконечно много формул ее представляющих. Одной из задач алгебры логики является построение '''канонических форм'''(т.е формул построенных по определенному правилу).
+
{{Определение
 +
|definition =
 +
'''Простой конъюнкцией''' (англ. ''inclusive conjunction'') или '''конъюнктом''' (англ. ''conjunct'') называется конъюнкция одной или нескольких переменных или их отрицаний, причём каждая переменная встречается не более одного раза.
 +
}}
 +
Простая конъюнкция
 +
* '''полная''', если в неё каждая переменная (или её отрицание) входит ровно <tex> 1 </tex> раз;
 +
* '''монотонная''', если она не содержит отрицаний переменных.
  
Если логическая формула выражена через отрицание, конъюнкцию и дизъюнкцию переменных, то такая форма представления называется '''нормальной'''.
+
{{Определение
 +
|definition =
 +
'''Дизъюнктивная нормальная форма, ДНФ''' (англ. ''disjunctive normal form, DNF'') {{---}} нормальная форма, в которой [[Определение булевой функции|булева функция]] имеет вид дизъюнкции нескольких простых конъюнктов.
 +
}}
 +
Пример ДНФ:
 +
<tex>f(x,y,z) = (x \land y) \lor (y \land \neg {z})</tex>.
  
Формулу называют '''элементарной конъюнкцией''', если она является конъюнкцией одной или нескольких термов.
+
== СДНФ ==
 +
{{Определение
 +
|definition =
 +
'''Совершенная дизъюнктивная нормальная форма, СДНФ''' (англ. ''perfect disjunctive normal form, PDNF'') — ДНФ, удовлетворяющая условиям:
 +
* в ней нет одинаковых простых конъюнкций,
 +
* каждая простая конъюнкция полная.
 +
}}
 +
Пример СДНФ:
 +
<tex>f(x,y,z) = (x \land \neg {y} \land z) \lor (x \land y \land \neg {z})</tex>.
  
Формула называется '''дизъюктивной нормальной формой(ДНФ)''', если она является дизъюнкцией неповторяемых элементарных конъюнкций.
 
  
Формула <math>f(\vec{x})</math> от n переменных называется '''совершенно дизъюктивной нормальной формой(СДНФ)''', если она обладает следующими свойствами :  
+
{{Теорема
 +
|statement=
 +
Для любой булевой функции <tex>f(\vec {x})</tex>, не равной тождественному нулю, существует СДНФ, ее задающая.
 +
|proof =
 +
Для любой булевой функции выполняется следующее соотношение, называемое '''разложением Шеннона''':
  
# <math>f(\vec x)</math> является ДНФ, в которой каждая элементарная конъюнкция есть конъюнкция n переменных x<sub>1</sub>, x<sub>2</sub>,...,x<sub>n</sub>, причем на i-ом месте этой конъюнкции стоит i-ый терм.
+
<tex>f(\vec{x}) = \neg  x_i \wedge f(x_1, \ldots ,x_{i-1},0,x_{i+1}, \ldots ,x_n) \vee
# Все элементарные конъюнкции в такой ДНФ попарно различны.
+
x_i \wedge f(x_1, \ldots ,x_{i-1},1,x_{i+1}, \ldots ,x_n)</tex>.
  
==Теорема об СДНФ==
+
Данное соотношение легко проверить подстановкой возможных значений <tex>x_i</tex> (<tex>0</tex> и <tex>1</tex>). Эта формула позволяет выносить <tex>x_i</tex> за знак функции. Последовательно вынося <tex>x_1</tex>, <tex>x_2</tex>,.., <tex>x_n</tex> за знак <tex>f(\vec{x})</tex>, получаем следующую формулу:
'''Теорема''' : Для любой булевой функции <math>f(\vec{x})</math>, не равной тождественному нулю, существует СДНФ, ее задающая.
+
<tex> f(\vec{x}) = \neg  x_1 \wedge \neg  x_2 \wedge \ldots \wedge \neg  x_{n-1} \wedge \neg  x_n \wedge f(0,0,\ldots,0,0)~\vee~</tex>
  
'''Док-во :''' Для любой булевой функции выполняется следующее соотношение
+
<tex>\neg  x_1 \wedge \neg  x_2 \wedge \ldots \wedge \neg  x_{n-1} \wedge x_n \wedge f(0,0,\ldots,0,1) ~\vee~ \\
 +
\ldots \\
 +
~\vee~ x_1 \wedge x_2 \wedge \ldots \wedge x_{n-1} \wedge \neg  x_n \wedge f(1,1,\ldots,1,0) ~\vee~\\
 +
x_1 \wedge x_2 \wedge \ldots \wedge x_{n-1} \wedge x_n \wedge f(1,1,\ldots,1) </tex>
  
<math>f(\vec{x}) = \overline x_i \bigwedge f(x_1,..,x_{i-1},0,x_{i+1},..,x_n) \bigvee
+
Так как применение данного соотношения к каждой из переменных увеличивает количество конъюнктов в два раза, то для функции от <tex>n</tex> переменных мы имеем <tex>2^n</tex> конъюнктов. Каждый из них соответствует значению функции на одном из <tex>2^n</tex> возможных наборов значений <tex> n </tex> переменных. Если на некотором наборе <tex>f(\vec{x})=0</tex>, то весь соответствующий конъюнкт также равен нулю и из представления данной функции его можно исключить. Если же <tex> f(\vec{x})=1</tex>, то в соответствующем конъюнкте само значение функции можно опустить. В результате для произвольной функции была построена СДНФ.
x_i \bigwedge f(x_1,..,x_{i-1},1,x_{i+1},x_n)</math>
+
}}
  
Данное соотношение легко проверить подстановкой всевозможных значений x<sub>i</sub>(0 и 1). Эта формула позволяет выносить x<sub>i</sub> за знак функции. Последовательно вынося x<sub>1</sub>, x<sub>2</sub>,.., x<sub>n</sub> за знак <math>f(\vec{x})</math>, получаем следующую формулу :
+
== Алгоритм построения СДНФ по таблице истинности ==
<math> f(\vec{x}) = \overline x_1 \bigwedge \overline x_2 \bigwedge ...\bigwedge \overline x_{n-1} \bigwedge \overline x_n \bigwedge f(0,0,...,0,0)~\bigvee~</math>
+
# В таблице истинности отмечаем те наборы переменных, на которых значение функции равно <tex> 1 </tex>.
 +
# Для каждого отмеченного набора записываем конъюнкцию всех переменных по следующему правилу: если значение некоторой переменной есть <tex> 1 </tex>, то в конъюнкцию включаем саму переменную, иначе ее отрицание.
 +
# Все полученные конъюнкции связываем операциями дизъюнкции.
 +
 
 +
== Пример построения СДНФ для медианы==
 +
=== Построение СДНФ для медианы от трех аргументов ===
 +
1. В таблице истинности отмечаем те наборы переменных, на которых значение функции равно <tex> 1 </tex>.
 +
 
 +
{| class="wikitable" style="width:10cm" border=1
 +
|+
 +
|-align="center" bgcolor=#EEEEFF
 +
|<tex> x </tex>||<tex> y </tex>||<tex> z </tex>|| <tex> \langle x,y,z \rangle </tex>
 +
|-align="center" bgcolor=#FFFFFF
 +
| 0 || 0 || 0 || 0
 +
|-align="center" bgcolor=#FFFFFF
 +
| 0 || 0 || 1 || 0
 +
|-align="center" bgcolor=#FFFFFF
 +
| 0 || 1 || 0 || 0
 +
|-align="center" bgcolor=#FFFFFF
 +
! 0 || 1 || 1 || 1
 +
|-align="center" bgcolor=#FFFFFF
 +
| 1 || 0 || 0 || 0
 +
|-align="center" bgcolor=#FFFFFF
 +
! 1 || 0 || 1 || 1
 +
|-align="center" bgcolor=#FFFFFF
 +
! 1 || 1 || 0 || 1
 +
|-align="center" bgcolor=#FFFFFF
 +
! 1 || 1 || 1 || 1
 +
|}
 +
 
 +
2. Для каждого отмеченного набора записываем конъюнкцию всех переменных по следующему правилу: если значение некоторой переменной есть <tex> 1 </tex>, то в конъюнкцию включаем саму переменную, иначе ее отрицание.
  
<math>\overline x_1 \bigwedge \overline x_2 \bigwedge ... \bigwedge \overline x_{n-1} \bigwedge x_n \bigwedge f(0,0,...,0,1) ~\bigvee~</math>
+
{| class="wikitable"  style="width:16cm" border=1
 +
|+
 +
|-align="center" bgcolor=#EEEEFF
 +
|<tex> x </tex>||<tex> y </tex>||<tex> z </tex>|| <tex> \langle x,y,z \rangle </tex> ||
 +
|-align="center" bgcolor=#FFFFFF
 +
| 0 || 0 || 0 || 0 ||
 +
|-align="center" bgcolor=#FFFFFF
 +
| 0 || 0 || 1 || 0 ||
 +
|-align="center" bgcolor=#FFFFFF
 +
| 0 || 1 || 0 || 0 ||
 +
|-align="center" bgcolor=#FFFFFF
 +
! 0 || 1 || 1 || 1 || <tex>(\neg {x} \land y \land z)</tex>
 +
|-align="center" bgcolor=#FFFFFF
 +
| 1 || 0 || 0 || 0 ||
 +
|-align="center" bgcolor=#FFFFFF
 +
! 1 || 0 || 1 || 1 || <tex>(x \land \neg {y} \land z)</tex>
 +
|-align="center" bgcolor=#FFFFFF
 +
! 1 || 1 || 0 || 1 || <tex>(x \land y \land \neg {z})</tex>
 +
|-align="center" bgcolor=#FFFFFF
 +
! 1 || 1 || 1 || 1 || <tex>(x \land y \land z)</tex>
 +
|}
  
<math>... </math>
+
3. Все полученные конъюнкции связываем операциями дизъюнкции:
 +
                                                                 
 +
<tex> \langle x,y,z \rangle = (x \land y \land z) \lor (\neg {x} \land y \land z) \lor (x \land \neg {y} \land z) \lor (x \land y \land \neg {z})</tex>.
  
<math>~\bigvee~ x_1 \bigwedge x_2 \bigwedge ... \bigwedge x_{n-1} \bigwedge \overline x_n \bigwedge f(1,1,...,1,0) ~\bigvee~</math>
+
===  Построение СДНФ для медианы от пяти аргументов ===
 +
{| class="wikitable"  style="width:16cm" border=1
 +
|+
 +
|-align="center" bgcolor=#EEEEFF
 +
|<tex> x_1 </tex>||<tex> x_2 </tex>||<tex> x_3 </tex>||<tex>x_4</tex>||<tex> x_5 </tex>||<tex> \langle x_1, x_2, x_3, x_4, x_5 \rangle </tex> ||
 +
|-align="center" bgcolor=#FFFFFF
 +
| 0 || 0 || 0 || 0 || 0 || 0 ||
 +
|-align="center" bgcolor=#FFFFFF
 +
| 0 || 0 || 0 || 0 || 1 || 0 ||
 +
|-align="center" bgcolor=#FFFFFF
 +
| 0 || 0 || 0 || 1 || 0 || 0 ||
 +
|-align="center" bgcolor=#FFFFFF
 +
| 0 || 0 || 0 || 1 || 1 || 0 ||
 +
|-align="center" bgcolor=#FFFFFF
 +
| 0 || 0 || 1 || 0 || 0 || 0 ||
 +
|-align="center" bgcolor=#FFFFFF
 +
| 0 || 0 || 1 || 0 || 1 || 0 ||
 +
|-align="center" bgcolor=#FFFFFF
 +
| 0 || 0 || 1 || 1 || 0 || 0 ||
 +
|-align="center" bgcolor=#FFFFFF
 +
! 0 || 0 || 1 || 1 || 1 || 1 || <tex>(\neg {x_1} \land \neg {x_2} \land x_3 \land x_4 \land x_5)</tex>
 +
|-align="center" bgcolor=#FFFFFF
 +
| 0 || 1 || 0 || 0 || 0 || 0 ||
 +
|-align="center" bgcolor=#FFFFFF
 +
| 0 || 1 || 0 || 0 || 1 || 0 ||
 +
|-align="center" bgcolor=#FFFFFF
 +
| 0 || 1 || 0 || 1 || 0 || 0 ||
 +
|-align="center" bgcolor=#FFFFFF
 +
! 0 || 1 || 0 || 1 || 1 || 1 || <tex>(\neg {x_1} \land x_2 \land \neg {x_3} \land x_4 \land x_5)</tex>
 +
|-align="center" bgcolor=#FFFFFF
 +
| 0 || 1 || 1 || 0 || 0 || 0 ||
 +
|-align="center" bgcolor=#FFFFFF
 +
! 0 || 1 || 1 || 0 || 1 || 1 || <tex>(\neg {x_1} \land x_2 \land x_3 \land \neg {x_4} \land x_5)</tex>
 +
|-align="center" bgcolor=#FFFFFF
 +
! 0 || 1 || 1 || 1 || 0 || 1 || <tex>(\neg {x_1} \land x_2 \land x_3 \land x_4 \land \neg {x_5})</tex>
 +
|-align="center" bgcolor=#FFFFFF
 +
! 0 || 1 || 1 || 1 || 1 || 1 || <tex>(\neg {x_1} \land x_2 \land x_3 \land x_4 \land x_5)</tex>
 +
|-align="center" bgcolor=#FFFFFF
 +
| 1 || 0 || 0 || 0 || 0 || 0 ||
 +
|-align="center" bgcolor=#FFFFFF
 +
| 1 || 0 || 0 || 0 || 1 || 0 ||
 +
|-align="center" bgcolor=#FFFFFF
 +
| 1 || 0 || 0 || 1 || 0 || 0 ||
 +
|-align="center" bgcolor=#FFFFFF
 +
! 1 || 0 || 0 || 1 || 1 || 1 || <tex>(x_1 \land \neg {x_2} \land \neg {x_3} \land x_4 \land x_5)</tex>
 +
|-align="center" bgcolor=#FFFFFF
 +
| 1 || 0 || 1 || 0 || 0 || 0 ||
 +
|-align="center" bgcolor=#FFFFFF
 +
! 1 || 0 || 1 || 0 || 1 || 1 || <tex>(x_1 \land \neg {x_2} \land x_3 \land \neg {x_4} \land x_5)</tex>
 +
|-align="center" bgcolor=#FFFFFF
 +
! 1 || 0 || 1 || 1 || 0 || 1 || <tex>(x_1 \land \neg {x_2} \land x_3 \land x_4 \land \neg {x_5})</tex>
 +
|-align="center" bgcolor=#FFFFFF
 +
! 1 || 0 || 1 || 1 || 1 || 1 || <tex>(x_1 \land \neg {x_2} \land x_3 \land x_4 \land x_5)</tex>
 +
|-align="center" bgcolor=#FFFFFF
 +
| 1 || 1 || 0 || 0 || 0 || 0 ||
 +
|-align="center" bgcolor=#FFFFFF
 +
! 1 || 1 || 0 || 0 || 1 || 1 || <tex>(x_1 \land x_2 \land \neg {x_3} \land \neg {x_4} \land x_5)</tex>
 +
|-align="center" bgcolor=#FFFFFF
 +
! 1 || 1 || 0 || 1 || 0 || 1 || <tex>(x_1 \land x_2 \land \neg {x_3} \land x_4 \land \neg {x_5})</tex>
 +
|-align="center" bgcolor=#FFFFFF
 +
! 1 || 1 || 0 || 1 || 1 || 1 || <tex>(x_1 \land x_2 \land \neg {x_3} \land x_4 \land x_5)</tex>
 +
|-align="center" bgcolor=#FFFFFF
 +
! 1 || 1 || 1 || 0 || 0 || 1 || <tex>(x_1 \land x_2 \land x_3 \land \neg {x_4} \land \neg {x_5})</tex>
 +
|-align="center" bgcolor=#FFFFFF
 +
! 1 || 1 || 1 || 0 || 1 || 1 || <tex>(x_1 \land x_2 \land x_3 \land \neg {x_4} \land x_5)</tex>
 +
|-align="center" bgcolor=#FFFFFF
 +
! 1 || 1 || 1 || 1 || 0 || 1 || <tex>(x_1 \land x_2 \land x_3 \land x_4 \land \neg {x_5})</tex>
 +
|-align="center" bgcolor=#FFFFFF
 +
! 1 || 1 || 1 || 1 || 1 || 1 || <tex>(x_1 \land x_2 \land x_3 \land x_4 \land x_5)</tex>
 +
|}
  
<math>x_1 \bigwedge x_2 \bigwedge ... \bigwedge x_{n-1} \bigwedge x_n \bigwedge f(1,1,...,1) </math>
+
<tex> \langle x_1, x_2, x_3, x_4, x_5 \rangle = (\overline {x_1} \land \overline {x_2} \land x_3 \land x_4 \land x_5) \lor (\overline {x_1} \land x_2 \land \overline {x_3} \land x_4 \land x_5) \lor (\overline {x_1} \land x_2 \land x_3 \land \overline {x_4} \land x_5) \lor (\overline {x_1} \land x_2 \land x_3 \land x_4 \land \overline {x_5}) \lor (\overline {x_1} \land x_2 \land x_3 \land x_4 \land x_5) \lor (x_1 \land \overline {x_2} \land \overline {x_3} \land x_4 \land x_5) \lor (x_1 \land \overline {x_2} \land x_3 \land \overline {x_4} \land x_5) \lor (x_1 \land \overline {x_2} \land x_3 \land x_4 \land \overline {x_5}) \lor (x_1 \land \overline {x_2} \land x_3 \land x_4 \land x_5) \lor (x_1 \land x_2 \land \overline {x_3} \land \overline {x_4} \land x_5) \lor (x_1 \land x_2 \land \overline {x_3} \land x_4 \land \overline {x_5}) \lor (x_1 \land x_2 \land \overline {x_3} \land x_4 \land x_5) \lor (x_1 \land x_2 \land x_3 \land \overline {x_4} \land \overline {x_5}) \lor (x_1 \land x_2 \land x_3 \land \overline {x_4} \land x_5) \lor (x_1 \land x_2 \land x_3 \land x_4 \land \overline {x_5}) \lor (x_1 \land x_2 \land x_3 \land x_4 \land x_5)</tex>.
  
Т.к применение данного соотношения к каждой из переменных увеличивает количество дизъюнктивных членов в два раза, то для функции от n переменных мы имеем 2<sup>n</sup> дизъюнктивных членов. Каждый из них соответствует значению функции на одном из 2<sup>n</sup> возможных наборов значений n переменных. Если на некотором наборе <math>f(\vec{x})=0</math>, то весь соответствующий дизъюнктивный член также равен 0 и из представления данной функции его можно исключить. Если же <math> f(\vec{x})=1</math>, то в соответствующем дизъюннктивном члене само значение функции можно опустить. В результате для произвольной функции была построена '''СДНФ'''.
+
==Примеры СДНФ для некоторых функций==
==Алгоритм построения СДНФ по таблице истинности==
+
Стрелка Пирса: <tex> x \downarrow y = (\neg {x} \land \neg {y})</tex>.
# В таблице истинности отмечаем те наборы переменных, на которых значение функции равно 1.
+
 
# Для каждого отмеченного набора записываем конъюнкцию всех переменных по следующему правилу : если значение некоторой переменной есть 1, то в конъюнкцию включаем саму переменную, иначе ее отрицание.
+
Исключающее или: <tex> x \oplus y \oplus z = (\overline{x} \land \overline{y} \land z) \lor (\overline{x} \land y \land \overline{z}) \lor (x \land \overline{y} \land \overline{z}) \lor (x \land y \land z)</tex>.
# Все полученные конъюнкции связываем операциями дизъюнкции.
+
 
 +
== См. также ==
 +
 
 +
* [[Сокращенная и минимальная ДНФ]]
 +
* [[КНФ]]
 +
 
 +
==Источники информации ==
 +
* [http://ru.wikipedia.org/wiki/%D0%A1%D0%94%D0%9D%D0%A4 СДНФ — Википедия]
 +
* [http://dvo.sut.ru/libr/himath/w163rabk/index.htm Е.Л Рабкин, Ю.Б. Фарфоровская — Дискретная математика]
 +
 
 +
[[Категория: Дискретная математика и алгоритмы]]
 +
 
 +
[[Категория: Булевы функции ]]

Текущая версия на 19:35, 4 сентября 2022

ДНФ

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

Простая конъюнкция

  • полная, если в неё каждая переменная (или её отрицание) входит ровно [math] 1 [/math] раз;
  • монотонная, если она не содержит отрицаний переменных.


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

Пример ДНФ: [math]f(x,y,z) = (x \land y) \lor (y \land \neg {z})[/math].

СДНФ

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

Пример СДНФ: [math]f(x,y,z) = (x \land \neg {y} \land z) \lor (x \land y \land \neg {z})[/math].


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

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

[math]f(\vec{x}) = \neg x_i \wedge f(x_1, \ldots ,x_{i-1},0,x_{i+1}, \ldots ,x_n) \vee x_i \wedge f(x_1, \ldots ,x_{i-1},1,x_{i+1}, \ldots ,x_n)[/math].

Данное соотношение легко проверить подстановкой возможных значений [math]x_i[/math] ([math]0[/math] и [math]1[/math]). Эта формула позволяет выносить [math]x_i[/math] за знак функции. Последовательно вынося [math]x_1[/math], [math]x_2[/math],.., [math]x_n[/math] за знак [math]f(\vec{x})[/math], получаем следующую формулу: [math] f(\vec{x}) = \neg x_1 \wedge \neg x_2 \wedge \ldots \wedge \neg x_{n-1} \wedge \neg x_n \wedge f(0,0,\ldots,0,0)~\vee~[/math]

[math]\neg x_1 \wedge \neg x_2 \wedge \ldots \wedge \neg x_{n-1} \wedge x_n \wedge f(0,0,\ldots,0,1) ~\vee~ \\ \ldots \\ ~\vee~ x_1 \wedge x_2 \wedge \ldots \wedge x_{n-1} \wedge \neg x_n \wedge f(1,1,\ldots,1,0) ~\vee~\\ x_1 \wedge x_2 \wedge \ldots \wedge x_{n-1} \wedge x_n \wedge f(1,1,\ldots,1) [/math]

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

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

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

Пример построения СДНФ для медианы

Построение СДНФ для медианы от трех аргументов

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

[math] x [/math] [math] y [/math] [math] z [/math] [math] \langle x,y,z \rangle [/math]
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. Для каждого отмеченного набора записываем конъюнкцию всех переменных по следующему правилу: если значение некоторой переменной есть [math] 1 [/math], то в конъюнкцию включаем саму переменную, иначе ее отрицание.

[math] x [/math] [math] y [/math] [math] z [/math] [math] \langle x,y,z \rangle [/math]
0 0 0 0
0 0 1 0
0 1 0 0
0 1 1 1 [math](\neg {x} \land y \land z)[/math]
1 0 0 0
1 0 1 1 [math](x \land \neg {y} \land z)[/math]
1 1 0 1 [math](x \land y \land \neg {z})[/math]
1 1 1 1 [math](x \land y \land z)[/math]

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

[math] \langle x,y,z \rangle = (x \land y \land z) \lor (\neg {x} \land y \land z) \lor (x \land \neg {y} \land z) \lor (x \land y \land \neg {z})[/math].

Построение СДНФ для медианы от пяти аргументов

[math] x_1 [/math] [math] x_2 [/math] [math] x_3 [/math] [math]x_4[/math] [math] x_5 [/math] [math] \langle x_1, x_2, x_3, x_4, x_5 \rangle [/math]
0 0 0 0 0 0
0 0 0 0 1 0
0 0 0 1 0 0
0 0 0 1 1 0
0 0 1 0 0 0
0 0 1 0 1 0
0 0 1 1 0 0
0 0 1 1 1 1 [math](\neg {x_1} \land \neg {x_2} \land x_3 \land x_4 \land x_5)[/math]
0 1 0 0 0 0
0 1 0 0 1 0
0 1 0 1 0 0
0 1 0 1 1 1 [math](\neg {x_1} \land x_2 \land \neg {x_3} \land x_4 \land x_5)[/math]
0 1 1 0 0 0
0 1 1 0 1 1 [math](\neg {x_1} \land x_2 \land x_3 \land \neg {x_4} \land x_5)[/math]
0 1 1 1 0 1 [math](\neg {x_1} \land x_2 \land x_3 \land x_4 \land \neg {x_5})[/math]
0 1 1 1 1 1 [math](\neg {x_1} \land x_2 \land x_3 \land x_4 \land x_5)[/math]
1 0 0 0 0 0
1 0 0 0 1 0
1 0 0 1 0 0
1 0 0 1 1 1 [math](x_1 \land \neg {x_2} \land \neg {x_3} \land x_4 \land x_5)[/math]
1 0 1 0 0 0
1 0 1 0 1 1 [math](x_1 \land \neg {x_2} \land x_3 \land \neg {x_4} \land x_5)[/math]
1 0 1 1 0 1 [math](x_1 \land \neg {x_2} \land x_3 \land x_4 \land \neg {x_5})[/math]
1 0 1 1 1 1 [math](x_1 \land \neg {x_2} \land x_3 \land x_4 \land x_5)[/math]
1 1 0 0 0 0
1 1 0 0 1 1 [math](x_1 \land x_2 \land \neg {x_3} \land \neg {x_4} \land x_5)[/math]
1 1 0 1 0 1 [math](x_1 \land x_2 \land \neg {x_3} \land x_4 \land \neg {x_5})[/math]
1 1 0 1 1 1 [math](x_1 \land x_2 \land \neg {x_3} \land x_4 \land x_5)[/math]
1 1 1 0 0 1 [math](x_1 \land x_2 \land x_3 \land \neg {x_4} \land \neg {x_5})[/math]
1 1 1 0 1 1 [math](x_1 \land x_2 \land x_3 \land \neg {x_4} \land x_5)[/math]
1 1 1 1 0 1 [math](x_1 \land x_2 \land x_3 \land x_4 \land \neg {x_5})[/math]
1 1 1 1 1 1 [math](x_1 \land x_2 \land x_3 \land x_4 \land x_5)[/math]

[math] \langle x_1, x_2, x_3, x_4, x_5 \rangle = (\overline {x_1} \land \overline {x_2} \land x_3 \land x_4 \land x_5) \lor (\overline {x_1} \land x_2 \land \overline {x_3} \land x_4 \land x_5) \lor (\overline {x_1} \land x_2 \land x_3 \land \overline {x_4} \land x_5) \lor (\overline {x_1} \land x_2 \land x_3 \land x_4 \land \overline {x_5}) \lor (\overline {x_1} \land x_2 \land x_3 \land x_4 \land x_5) \lor (x_1 \land \overline {x_2} \land \overline {x_3} \land x_4 \land x_5) \lor (x_1 \land \overline {x_2} \land x_3 \land \overline {x_4} \land x_5) \lor (x_1 \land \overline {x_2} \land x_3 \land x_4 \land \overline {x_5}) \lor (x_1 \land \overline {x_2} \land x_3 \land x_4 \land x_5) \lor (x_1 \land x_2 \land \overline {x_3} \land \overline {x_4} \land x_5) \lor (x_1 \land x_2 \land \overline {x_3} \land x_4 \land \overline {x_5}) \lor (x_1 \land x_2 \land \overline {x_3} \land x_4 \land x_5) \lor (x_1 \land x_2 \land x_3 \land \overline {x_4} \land \overline {x_5}) \lor (x_1 \land x_2 \land x_3 \land \overline {x_4} \land x_5) \lor (x_1 \land x_2 \land x_3 \land x_4 \land \overline {x_5}) \lor (x_1 \land x_2 \land x_3 \land x_4 \land x_5)[/math].

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

Стрелка Пирса: [math] x \downarrow y = (\neg {x} \land \neg {y})[/math].

Исключающее или: [math] x \oplus y \oplus z = (\overline{x} \land \overline{y} \land z) \lor (\overline{x} \land y \land \overline{z}) \lor (x \land \overline{y} \land \overline{z}) \lor (x \land y \land z)[/math].

См. также

Источники информации