Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции - Дискретная математика.doc
Скачиваний:
2
Добавлен:
01.04.2025
Размер:
1.34 Mб
Скачать

Конъюнктивная нормальная форма (днф)

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

;

;

;

;

.

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

Рассмотрим на примере процесс построения КНФ функции, заданной таблицей истинности. Пусть некоторая булева функция задана следующей таблицей истинности:

x1

x2

x3

f

0

0

0

0

0

0

1

1

0

1

0

0

0

1

1

0

1

0

0

1

1

0

1

1

1

1

0

0

1

1

1

1

Рассмотрим строки таблицы, равные нулю. В первой строке таблицы функция равна нулю при условии x1=0, x2=0, x3=0. Нулевому значению функции f(x1=0, x2=0, x3=0) будет соответствовать макстерм , поскольку он равен нулю только при данных значениях аргументов. Остальным строкам таблицы, в которых f=0, будут соответствовать следующие макстермы: , , . Поскольку наша функция равна нулю на первом наборе аргументов И на третьем наборе И на четвертом наборе И на седьмом наборе, то для получения окончательной аналитической записи нашей функции полученные нами макстермы следует объединить операцией И. В результате получим следующую КНФ:

f = & & & .

В формуле КНФ каждый терм отвечает за определенную строку таблицы истинности, то есть за одну из ситуаций, когда функция принимает нулевое значение. Если, например, все аргументы функции будут равны единицам (последняя строка таблицы истинности), то в построенной КНФ каждый из четырех термов будет равен единице, и их конъюнкция также будет равна единице. Таким образом, функция даст единичное значение, что совпадает с ее таблицей истинности.

Отметим, что если в КНФ ранг каждого терма равен количеству аргументов функции, то такая формула называется совершенной конъюнктивной нормальной формой или СКНФ. Наша функция f, а также функции y8, y9, y10 на предыдущей странице, представлены в виде СКНФ.

Таким образом, алгоритм построения СКНФ по таблице истинности заключается в следующем:

1. Для каждой строки таблицы истинности, равной нулю, сформировать макстерм, в котором аргументы, равные единице, указать с инверсией, а аргументы, равные нулю, указать без инверсии.

2. Объединить все полученные термы операцией конъюнкция.

Отметим следующее. В наших примерах мы строили СДНФ и СКНФ по одной и той же таблице истинности. Хотя внешне полученные СДНФ и СКНФ совершенно не похожи между собой, они представляют аналитические записи одной и той же булевой функции, то есть оба выражения полностью эквивалентны. Подставляя любой из наборов аргументов в СДНФ, мы получим то же самое значение, что и с помощью СКНФ для того же набора аргументов. СДНФ и СКНФ являются аналитической записью содержимого таблицы истинности будевой функции.

Может показаться, что полученные нами СДНФ и СКНФ достаточно громоздки и сложны, и гораздо проще пользоваться таблицей истинности. Причина в том, что таблица истинности функции f была составлена таким образом, чтобы количество наборов, при которых функция равна единице, и наборов, при которых функция равна нулю, выбрано одинаковым. В общем случае количество единичных и нулевых строк будет различным.

Рассмотрим, например, следующую таблицу истинности (к слову, это таблица функции конъюнкции от трех аргументов). Данная функция принимает единичное значение лишь на одном наборе из восьми, а нулевое – на семи наборах. СКНФ и СДНФ будут иметь следующий вид:

СДНФ(fИ) = .

СКНФ(fИ) = & & & &

& & &

x1

x2

x3

fИ

0

0

0

0

0

0

1

0

0

1

0

0

0

1

1

0

1

0

0

0

1

0

1

0

1

1

0

0

1

1

1

1

Очевидно, что СДНФ получилась значительно короче, чем СКНФ, хотя и является ее эквивалентом. Это связано с тем, что СДНФ учитывает только строки, в которых функция равна единице, а СКНФ – строки, в которых функция равна нулю. Представление такой функции в виде СДНФ предпочтительнее, чем виде СКНФ или таблицы истинности.

Рассмотрим следующую таблицу истинности (таблицу истинности операции ИЛИ от трех аргументов):

x1

x2

x3

fИЛИ

0

0

0

0

0

0

1

1

0

1

0

1

0

1

1

1

1

0

0

1

1

0

1

1

1

1

0

1

1

1

1

1

СДНФ и СКНФ в этом случае будут следующими:

СДНФ(fИЛИ) =     .

СКНФ(fИЛИ) = .

В данном случае более короткая запись у СКНФ, поскольку в таблице истинности строка, в которой функция равна нулю, только одна, а строк, в которых функция равна единице, семь.

Таким образом, можно сформулировать следующее правило: если в таблице истинности количество строк, в которых f=0, превышает количество строк, в которых f=1, то более кратким будет представление функции в виде СДНФ. В противном случае более кратким будет представление функции в виде СКНФ.

Пусть, например, некоторая функция задана в виде следующей СДНФ:

y = .

Что можно сказать об этой функции? Очевидно, что функция зависит от десяти аргументов x1-x10, и ее СДНФ состоит из двух термов. Это означает, что функция принимает единичное значение только лишь в двух строках таблицы истинности, соответствующих данным термам. В остальных строках функция равна нулю.

Сколько же всего строк в таблице истинности? Поскольку функция зависит от десяти переменных-аргументов, то число строк в таблице истинности (число различных вариантов наборов аргументов) будет равно 210=1024. Следовательно, в 1022 случаях функция принимает нулевое значение, и лишь в двух – единичное. Если бы мы попытались записать ее в виде СКНФ, нам потребовалось бы 1022 макстерма, что заняло бы несколько страниц текста и несколько часов времени. Понятно, что запись такой функции в виде СДНФ значительно более компактна по сравнению с СКНФ или таблицей истинности.

Можно привести и противоположный пример. Пусть булева функция задана следующей СКНФ:

y = &

& .

Очевидно, что перед нами булева функция десяти переменных, равная нулю в 2 случаях из 1024 . В оставшихся 1022 случаях функция равна единице, и ее СДНФ будет состоять из 1022 минтермов. Запись подобной функции в виде СКНФ значительно более компактна по сравнению с СДНФ или таблицей истинности.

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