Решение задач с использованием конъюнктивной нормальной. Решение задач с использованием конъюнктивной нормальной и дизъюнктивной нормальной форм
![]()
|
Решение задач с использованием конъюнктивной нормальной и дизъюнктивной нормальной форм Лапшева Елена Евгеньевна, ПРЦНИТ СГУ, МОУ «Физико-технический лицей №1 г. Саратова» 16 февраля 2007 г. В задачниках по логике часто встречаются стандартные задачи, где нужно записать функцию, реализующую релейно-контактную схему, упростить ее и построить таблицу истинности для этой функции. А как решать обратную задачу? Дана произвольная таблица истинности, нужно построить функциональную или релейно-контактную схему. Этим вопросом мы и займемся сегодня. Любую функцию алгебры логики можно представить комбинацией трех операций: конъюнкции, дизъюнкции и инверсии. Давайте разберемся, как это делается. Для этого запишем несколько определений. Минтерм — это функция, образованная конъюнкцией некоторого числа переменных или их отрицаний. Минтерм принимает значение 1 при единственном из всех возможных наборов аргументов, и значение 0 при всех остальных. Пример: x1 ⋅ x2 ⋅ x3 ⋅ x4 . Макстерм — это функция, образованная дизъюнкцией некоторого числа переменных или их отрицаний. Макстерм принимает значение 0 в одном из возможных наборов, и 1 при всех других. Пример: x1 + x2 + x3 . Функция в дизъюнктивной нормальной форме (ДНФ) является логической суммой минтермов. Пример: x1 ⋅ x2 + x1 ⋅ x2 + x1 ⋅ x2 ⋅ x3 . Конъюнктивная нормальная форма (КНФ) является логическим произведением элементарных дизъюнкций (макстермов). Пример: ( x1 + x 2 + x 3 ) ⋅ ( x1 + x 2 ) . Совершенной дизъюнктивной нормальной формой логической функции от n переменных называется ДНФ, в каждом минтерме которой присутствуют все n переменных или их отрицания. Пример: f ( x1 , x2 , x3 ) = x1 ⋅ x2 ⋅ x3 + x1 ⋅ x2 ⋅ x3 + x1 ⋅ x2 ⋅ x3 Совершенной конъюнктивной нормальной формой логической функции от n переменных называется КНФ, в каждом макстерме которой присутствуют все n переменных или их отрицания. Пример: f ( x1 , x2 , x3 ) = ( x1 + x2 + x3 ) ⋅ ( x1 + x2 + x3 ) Запись логической функции по таблице Любая логическая функция может быть выражена в виде СДНФ или СКНФ. В качестве примера рассмотрим функцию f, представленную в таблице. x1 x2 x3 f(x1, x2, x3) G0 G1 G4 G5 G7 0 0 0 1 1 0 0 0 0 0 0 1 1 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 0 0 1 0 0 1 0 0 1 0 1 1 0 0 0 1 0 1 1 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 1 Функции G0, G1, G4, G5, G7 – это минтермы (см. определение). Каждая из этих функций является произведением трех переменных или их инверсий и принимает значение 1 1 только в одной ситуации. Видно, что для того, чтобы получить 1 в значении функции f, нужен один минтерм. Следовательно, количество минтермов, составляющих СДНФ этой функции, равно количеству единиц в значении функции: f= G0+G1+G4+G5+G7. Таким образом, СДНФ имеет вид: f ( x1 , x2 , x3 ) = x1 ⋅ x2 ⋅ x3 + x1 ⋅ x2 ⋅ x3 + x1 ⋅ x2 ⋅ x3 + x1 ⋅ x2 ⋅ x3 + x1 ⋅ x2 ⋅ x3 . Аналогично можно построить СКНФ. Количество сомножителей равно количеству нулей в значениях функции: f ( x1 , x2 , x3 ) = ( x1 + x2 + x3 ) ⋅ ( x1 + x2 + x3 ) ⋅ ( x1 + x2 + x3 ) . Таким образом, можно записать в виде формулы любую логическую функцию, заданную в виде таблицы. Алгоритм построения СДНФ по таблице истинности Дана таблица истинности некоторой функции. Для построения СДНФ необходимо выполнить следующую последовательность шагов: 1. Выбрать все строки таблицы, в которых функция принимает значение 1. 2. Каждой такой строке поставить в соответствие конъюнкцию всех аргументов или их инверсий (минтерм). При этом аргумент, принимающий значение 0, входит в минтерм с отрицанием, а значение 1 – без отрицания. 3. Наконец, образуем дизъюнкцию всех полученных минтермов. Количество минтермов должно совпадать с количеством единиц логической функции. Алгоритм построения СКНФ по таблице истинности Дана таблица истинности некоторой функции. Для построения СКНФ необходимо выполнить следующую последовательность шагов: 1. Выбрать все строки таблицы, в которых функция принимает значение 0. 2. Каждой такой строке поставить в соответствие дизъюнкцию всех аргументов или их инверсий (макстерм). При этом аргумент, принимающий значение 1, входит в макстерм с отрицанием, а значение 1 – без отрицания. 3. Наконец, образуем конъюнкцию всех полученных макстермов. Количество макстермов должно совпадать с количеством нулей логической функции. Если условиться из двух форм (СДНФ или СКНФ) отдавать предпочтение той, которая содержит меньше букв, то СДНФ предпочтительней, если среди значений функции таблицы истинности меньше единиц, СКНФ – если меньше нулей. Пример. Дана таблица истинности логической функции от трех переменных. Построить логическую формулу, реализующую эту функцию. A B C F(A, B, C) 0 0 0 1 0 0 1 1 0 1 0 1 0 1 1 1 1 0 0 0 1 0 1 0 1 1 0 1 1 1 1 1 Выберем те строки в данной таблице истинности, в которых значения функции равна 0. F ( A, B, C) = ( A + B + C) ⋅ ( A + B + C ) Проверим выведенную функцию, составив таблицу истинности. 2 A B C A + B+C A + B+C F(A, B, C) 0 0 0 1 1 1 0 0 1 1 1 1 0 1 0 1 1 1 0 1 1 1 1 1 1 0 0 0 1 0 1 0 1 1 0 0 1 1 0 1 1 1 1 1 1 1 1 1 Сравнив начальную и итоговую таблицу истинности можно сделать вывод, что логическая функция построена правильно. Решение задач 1. Городская олимпиада по базовому курсу информатики, 2007 год. Три преподавателя отбирают задачи для олимпиады. На выбор предлагается несколько задач. По каждой задаче каждый из преподавателей высказывает свое мнение: легкая (0) или трудная (1) задача. Задача включается в олимпиадное задание, если не менее двух преподавателей отметили ее как трудную, но если все три преподавателя считают ее трудной, то такая задача не включается в олимпиадное задание как слишком сложная. Составьте логическую схему устройства, которое будет выдавать на выходе 1, если задача включается в олимпиадное задание, и 0, если не включается. Решение. Построим таблицу истинности искомой функции. У нас есть три входные переменные (три преподавателя). Следовательно, искомая функция будет функцией от трех переменных. Анализируя условие задачи, получаем следующую таблицу истинности: A B C F(A,B,C) 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 0 Строим СДНФ. F ( A, B, C ) = ABC + A BC + AB C Теперь строим логическую схему этой функции. A B & 1 F(A,B,C) C & & 3 2. Городская олимпиада по базовому курсу информатики, 2007 год. Постройте схему электрической цепи для подъезда трехэтажного дома такую, чтобы выключателем на любом этаже можно было бы включить или выключить свет во всем доме. Решение. Итак, у нас есть три выключателя, которыми мы должны включать и выключать свет. У каждого выключателя есть два состояния: верхнее (0) и нижнее (1). Предположим, что если все три выключателя в положении 0, свет в подъезде выключен. Тогда при переводе любого из трех выключателей в положение 1 свет в подъезде должен загореться. Очевидно, что при переводе любого другого выключателя в положение 1, свет в подъезде выключится. Если третий выключатель перевести в положение 1, свет в подъезде загорится. Строим таблицу истинности. Выключатель на Выключатель на Выключатель на Свет в подъезде первом этаже втором этаже третьем этаже F(A,B,C) A B C 0 0 0 0 0 0 1 1 0 1 0 1 0 1 1 0 1 0 0 1 1 0 1 0 1 1 0 0 1 1 1 1 Тогда, F ( A, B, C ) = A BC + ABC + A BC + ABC . 3 этаж A A A A 2 этаж B B B B 1 этаж C C C C 3. Условие изменения значения логической функции F ( A, B, C ) = C → A + B при одновременном изменении аргументов B и C равно: 1) A → ( B ⊕ C ) 2) A( B ⊕ C ) 3) ( B ⊕ C ) → A 4) ( B ⊕ C ) → A 5) A → ( B ⊕ C ) Примечание. Для успешного решения данной задачи вспомним следующие логические формулы: x → y = x+ y x ⊕ y = x⋅ y + x⋅ y x ↔ y = x⋅ y + x⋅ y 4 Решение. Нам дана логическая функция от трех переменных F1 ( A, B, C ) = C → A + B = C + A ⋅ B . Изменим одновременно переменные B и C: F2 ( A, B, C ) = F1 ( A, B, C ) = C + A ⋅ B . Построим таблицы истинности этих двух функций: A B C F1 F2 0 0 0 1 0 0 0 1 1 1 0 1 0 1 1 0 1 1 0 1 1 0 0 1 0 1 0 1 0 1 1 1 0 1 0 1 1 1 0 1 Анализируем полученную таблицу. Из восьми строк таблицы лишь в двух (2-й и 3-й) функция не изменяет своего значения. Обратите внимание, что в этих строках переменная A не изменяет своего значения на противоположное, а переменные B и C – изменяют. A B C F1 F2 F3 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 0 0 1 1 0 1 1 1 0 0 1 0 1 1 0 1 0 1 1 1 1 0 1 0 1 1 1 1 0 1 1 Строим СКНФ функции по этим строкам: F3 ( A, B, C ) = ( A + B + C ) ⋅ ( A + B + C ) = A + A ⋅ B + A ⋅ C + A ⋅ B + B ⋅ C + A ⋅ C + B ⋅ C = . = A + (B ↔ C) = A + B ⊕ C = (B ⊕ C) → A Следовательно, искомый ответ – 4. 4. Условие изменения значения логической функции F ( A, B, C ) = C + AB при одновременном изменении аргументов A и B равно: 1) C + ( A ⊕ B) 2) C + ( A ⊕ B ) 3) C ( A ⊕ B ) 4) C ( A ⊕ B) 5) C → ( A ⊕ B ) Решение. F1 ( A, B, C ) = C + AB = C ⋅ ( A + B ) = A ⋅ C + B ⋅ C F2 ( A, B, C ) = F1 ( A, B, C ) = A ⋅ C + B ⋅ C 5 Строим таблицу истинности. A B C F1 F2 F3 0 0 0 1 0 1 0 0 1 0 0 0 0 1 0 1 1 0 0 1 1 0 0 0 1 0 0 1 1 0 1 0 1 0 0 0 1 1 0 0 1 1 1 1 1 0 0 0 Анализируем полученную таблицу. Из восьми строк таблицы лишь в двух (1-й и 7-й) функция меняет свое значение. Обратите внимание, что в этих строках переменная С не меняет свое значение, а переменные A и B – меняют. Строим СДНФ функции по этим строкам: F3 ( A, B, C ) = A ⋅ B ⋅ C + A ⋅ B ⋅ C = C ( A ⋅ B + A ⋅ B ) = C ( A ↔ B ) = C + ( A ⊕ B ) Следовательно, искомый ответ – 2. |