|
|
| |
ДНФ, КНФ |
Введем обозначения
_
Xа = X, если а = 1 и X, если а = 0
Элементарной конъюнкцией (ЭК) называется выражение вида
X1a1 X2a2…Xnan
ЭК называется правильной, если все входящие в неё переменные различны.
Правильная ЭК называется полной относительно данного набора переменных, если в неё входят все эти переменные.
Для элементарных дизъюнкций (ЭД) – аналогичный набор определений.
ЭД – выражение вида
X1a1 V X2a2 V…V Xnan
ДНФ – дизъюнкция разных правильных элементарных конъюнкций.
__
X1 V X1X2 V X1X2X3 – ДНФ.
ДНФ называется совершенной (СДНФ), если все входящие в неё элементарные конъюнкции полны относительно данного набора переменных.
КНФ – конъюнкция разных правильных элементарных дизъюнкций.
СКНФ – совершенная КНФ. У нее все ЭД полны.
Теорема.
Любая булева функция, тождественно не равная нулю, представима и притом единственным образом в виде СДНФ по формуле:
F(x1… xn) = V(X1a1 X2a2…Xnan)
Доказательство
I. Существование
Первая часть доказана.
II. Единственность
Посчитаем, сколько полных ЭК может быть
Всего – 2n = N (по перестановке комбинаций)
Число СДНФ – 2N-1 – число различных формул СДНФ.
Это число совпадает с числом различных булевых функций от n переменных (за исключением константы 0).
Так как каждой функции ставится в соответствие формула СДНФ и число разных формул и разных функций одинаково, то каждой функции соответствует только одна формула. Теорема доказана полностью.
Замечание. Единственность доказана при фиксированном числе аргументов n. Так как, вводя фиктивные переменные, мы будем менять вид формулы.
Следствие. Любая булева функция представима формулой, в которую входит только конъюнкция, дизъюнкция и отрицание.
Принцип двойственности
F*(x1…xn) – двойственная функция,
_ _ _
F*(x1…xn) = F(x1…xn)
Например
____
_ _
(XY)* = XY = X V Y
Чтобы получить вектор двойственности функции при ее табличном задании, переворачиваем таблицу на 180 градусов и берем отрицание от получившейся функции.
Теорема. Принцип двойственности.
Если F (x1…xn) является суперпозицией функций fi (i = 1...k), то двойственная к ней функция является такой же по структуре суперпозицией, но от двойственных функций.
Доказательство следует из определения двойственной функции.
_ _ _ _ _ __
F*(x1..xn) = F(x1…xn) = f(f1…fk) = f*(f1…fk)
Следствие
f(x1..xn) = K1 V K2 V… V Kn – СДНФ
f*(x1..xn) = D1 D2 … Dn - СКНФ
Используя принцип двойственности, можно доказать следующую теорему.
Любая булева функция, тождественно не равная единице представима и притом единственным образом в виде СКНФ.
Доказательство получается из самого принципа двойственности и его следствий.
Задача минимизации ДНФ.
Определения:
1. Рангом правильной ЭК называется число разных переменных, входящих в нее.
2. Рангом ДНФ называется сумма рангов всех ЭК, входящих в ДНФ.
3. Минимальной ДНФ или Dmin для данной функции называется ДНФ, которая равна этой функции и имеет наименьший ранг.
Задача минимизации ДНФ для данной функции состоит в нахлждении минимальной ДНФ.
Число ДНФ при фиксированном n – конечное (n - число переменных)
Тривиальный алгоритм минимизации ДНФ состоит в следующем:
1. Выписываем все возможные ДНФ от данного числа n в порядке возрастания их рангов.
2. Последовательно сравниваем нашу функцию с каждой из этих ДНФ. Первая ДНФ, которой равна наша функция имеет минимальный ранг.
Алгоритм представления функции в виде СДНФ.
1. Выписываем носитель функции.
2. Для каждого вектора из носителя выписываем конъюнкцию соответствующих переменных. (если координата равна нулю, переменную пишем с отрицанием, если единице – без отрицания). Это и будут все полные ЭК.
3. Выписываем дизъюнкцию всех этих ЭК.
Алгоритм представления функции в виде СКНФ.
1. Выписываем носитель функции
2. Для каждого вектора из носителя выписываем дизъюнкцию соответствующих переменных. (если координата равна нулю, переменную пишем без отрицания, . если единице – с отрицанием). Это и будут все полные ЭД.
3. Выписываем конъюнкцию всех этих ЭД.
Copyright © 2003—2016 "Litevv"
| | | |
|
|
|
|
|