Как составить карту карно для мднф

Занятие 17. Тема «Минимизация функций с помощью карт Карно»

План лекции:

  1. Понятие карты Карно

  2. Виды карт Карно и метод их заполнение

  3. Принципы склейки

  4. Правило нахождения МДНФ и МКНФ

Понятие карты Карно

МДНФ – минимальная дизъюнктивная нормальная форма

МКНФ — минимальная конъюнктивная нормальная форма

Метод карт Карно позволяет быстро получить минимальные ДНФ и КНФ.

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

Виды карт Карно и метод их заполнение

Карта Карно для 2-х переменных – квадратная таблица размером (4 ячейки)

х1 х2

0

1

0

1

Ячейки заполняются 0 или 1, полученные в последнем столбце таблицы истинности, соответствующие наборам 00, 01, 10, 11.

Карта Карно для 3-х переменных – прямоугольная таблица размером (8ячеек). Каждая ячейка соответствует наборам 000, 001, 010, 011, 100, 101, 110, 111.

х2х3

х1

00

01

11

10

0

1

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

Карта Карно для 4-х переменных – квадратная таблица размером (16 ячеек). Каждая ячейка соответствует наборам 0000, 0001, 0010, 0011, 0100, 0101, 0110, 0111, 1000, 1001, 1010, 1011, 1100, 1101, 1110, 1111.

Карта Карно для 5-х переменных – прямоугольная таблица размером (32 ячейки).

Минимизация функций с помощью карт Карно или нахождение МДНФ (МКНФ) – это процесс склеивания одинаковых значений, стоящих в соседних ячейках.

Принципы склейки

  • Склейку клеток карты Карно можно осуществлять по единицам (если необходимо получить  МДНФ) или по нулям (если требуется МКНФ).

  • Склеивать можно только прямоугольные области с числом единиц (нулей) 2n, где n — целое число.

  • Область, которая подвергается склейке, должна содержать только единицы (нули).

  • Крайние клетки каждой горизонтали и каждой вертикали также граничат между собой и могут объединяться в прямоугольники. Следствием этого правила является смежность всех четырёх угловых ячеек карты Карно для N=4. Если во всех четырёх угловых ячейках стоят единицы (нули), они могут быть объединены в квадрат.

  • Все единицы (нули) должны попасть в какую-либо область.

  • С точки зрения МДНФ (МКНФ), число областей должно быть как можно меньше (каждая область представляет собой терм), а число клеток в области должно быть как можно больше (чем больше клеток в области, тем меньше переменных содержит терм).

  • Области могут пересекаться.

  • Область должна располагаться симметрично оси (оси располагаются через каждые четыре клетки) Несмежные области, расположенные симметрично оси, могут объединяться в одну.

Правило нахождения МДНФ (МКНФ).

Берём первую полученную область и смотрим, какие переменные не меняются в пределах этой области, выписываем конъюнкцию для МДНФ (дизъюнкцию для МКНФ) этих переменных; если неменяющаяся переменная нулевая, проставляем над ней инверсию для МДНФ (для МКНФ не ставим инверсию). Если переменная единичная, то не ставим инверсию для МДНФ (ставим инверсию для МКНФ). Берём следующую область, выполняем то же самое, что и для первой, и т. д. для всех областей. Конъюнкции областей объединяем дизъюнкцией для МДНФ (дизъюнкции областей объединяем конъюнкцию для МКНФ).

Функции могут быть записаны не формулой, а аналитическим путем, то есть содержать номера наборов из таблицы истинности дизъюнктивно ( работает с 1) или конъюнктивно (& работает с 0). Например, Y= (1,4,8,10,12,14,15). Это означает, что карта Карно из 4-х переменных заполняется единицами в ячейках с номерами 1,4,8,10,12,14,15, а остальные ячейки заполняются нулями.

Пример.

x

y

z

B

0

0

0

1

1

1

1

1

0

1

0

0

1

1

1

0

1

1

0

1

0

1

0

1

0

1

1

1

0

1

0

1

1

1

0

0

0

0

0

0

1

0

0

0

1

1

1

0

0

0

1

0

1

0

1

0

1

0

1

1

1

1

0

0

0

1

1

0

0

0

1

1

1

0

0

0

0

0

1

1

Для нахождения МДНФ

— Составим карту для 3-х переменных и заполним ее 1 из последнего столбца таблицы истинности.

уz

х

00

01

11

10

0

1

1

1

1

1

1

— Выделим покрытия по принципам склейки

— Для каждого покрытия составляем элементарную конъюнкцию, зачеркивая столбец с разными значениями и записывая оставшие переменные с инверсией, если все 0 и без инверсии, если все 1.

x y z x y z x y z

0 0 0 0 0 1 1 0 1

0 1 0 1 0 1 1 1 1

МДНФ: у=

Для нахождения МКНФ

— Составим карту для 3-х переменных и заполним ее 0 из последнего столбца таблицы истинности.

уz

х

00

01

11

10

0

0

1

0

0

— Выделим покрытия по принципам склейки

— Для каждого покрытия составляем элементарную дизъюнкцию, зачеркивая столбец с разными значениями и записывая оставшие переменные с инверсией, если все 1 и без инверсии, если все 0.

x y z x y z

1 0 0 0 1 1

1 1 0

МКНФ: у=

Задание для самостоятельного выполнения

  1. составить карту Карно и найти МДНФ и МКНФ для следующих функций

а)

б)

  1. Ответить на контрольные вопросы:

  1. Что называется картой Карно?

  2. Какие разновидности карт Карно есть?

  3. Как заполняются карты Карно?

  4. Для чего нужны принципы склейки?.

  5. Чем отличается правило нахождения МДНФ от правила нахождения МКНФ?

  6. Пользуясь этим и теоретическим материалом учебника М.С. Спирина «Дискретная математика» глава 4 п.4,6,3 стр.180, выполнить 1 задание.

Выполненное задание отправить на адрес электронной почты преподавателя. Имя файла – фамилия студента и номер занятия. (например Петров-17)

Схемотехника. Минимизация логических функций

Время на прочтение
5 мин

Количество просмотров 368K

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

Зачем это нужно?

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

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

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

Минимизация логических функций при помощи карт Карно

Карта Карно — графический способ минимизации переключательных (булевых) функций, обеспечивающий относительную простоту работы с большими выражениями и устранение потенциальных гонок. Представляет собой операции попарного неполного склеивания и элементарного поглощения. Карты Карно рассматриваются как перестроенная соответствующим образом таблица истинности функции. Карты Карно можно рассматривать как определенную плоскую развертку n-мерного булева куба.

Карты Карно были изобретены в 1952 Эдвардом В. Вейчем и усовершенствованы в 1953 Морисом Карно, физиком из «Bell Labs», и были призваны помочь упростить цифровые электронные схемы.

В карту Карно булевы переменные передаются из таблицы истинности и упорядочиваются с помощью кода Грея, в котором каждое следующее число отличается от предыдущего только одним разрядом.

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

image

Возможность поглощения следует из очевидных равенств

image

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

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

На рисунке изображена простая таблица истинности для функции из двух переменных, соответствующий этой таблице 2-мерный куб (квадрат), а также 2-мерный куб с обозначением членов СДНФ и эквивалентная таблица для группировки термов:

image

В случае функции трёх переменных приходится иметь дело с трёхмерным кубом. Это сложнее и менее наглядно, но технически возможно. На рисунке в качестве примера показана таблица истинности для булевой функции трёх переменных и соответствующий ей куб.

image

Как видно из рисунка, для трёхмерного случая возможны более сложные конфигурации термов. Например, четыре терма, принадлежащие одной грани куба, объединяются в один терм с поглощением двух переменных:
image
В общем случае можно сказать, что 2K термов, принадлежащие одной K–мерной грани гиперкуба, склеиваются в один терм, при этом поглощаются K переменных.

Для упрощения работы с булевыми функциями большого числа переменных был предложен следующий удобный приём. Куб, представляющий собой структуру термов, разворачивается на плоскость как показано на рисунке. Таким образом появляется возможность представлять булевы функции с числом переменных больше двух в виде плоской таблицы. При этом следует помнить, что порядок кодов термов в таблице (00 01 11 10) не соответствует порядку следования двоичных чисел, а клетки, находящиеся в крайних столбцах таблицы, соседствуют между собой.
image

Аналогичным образом можно работать с функциями четырёх, пяти и более переменных. Примеры таблиц для N=4 и N=5 приведены на рисунке. Для этих таблиц следует помнить, что соседними являются клетки, находящиеся в соответственных клетках крайних столбцов и соответственных клетках верхней и нижней строки. Для таблиц 5 и более переменных нужно учитывать также, что квадраты 4х4 виртуально находятся друг над другом в третьем измерении, поэтому соответственные клетки двух соседних квадратов 4х4 являются сосоедними, и соответствующие им термы можно склеивать.

image

Карта Карно может быть составлена для любого количества переменных, однако удобно работать при количестве переменных не более пяти. По сути Карта Карно — это таблица истинности составленная в 2-х мерном виде. Благодаря использованию кода Грея в ней верхняя строка является соседней с нижней, а правый столбец соседний с левым, т.о. вся Карта Карно сворачивается в фигуру тор (бублик). На пересечении строки и столбца проставляется соответствующее значение из таблицы истинности. После того как Карта заполнена, можно приступать к минимизации.

Если необходимо получить минимальную ДНФ, то в Карте рассматриваем только те клетки которые содержат единицы, если нужна КНФ, то рассматриваем те клетки которые содержат нули. Сама минимизация производится по следующим правилам (на примере ДНФ):

  1. Объединяем смежные клетки содержащие единицы в область, так чтобы одна область содержала 2n (n целое число = 0…infty) клеток(помним про то что крайние строки и столбцы являются соседними между собой), в области не должно находиться клеток содержащих нули;
  2. Область должна располагаться симметрично оси(ей) (оси располагаются через каждые четыре клетки);
  3. Не смежные области расположенные симметрично оси(ей) могут объединяться в одну;
  4. Область должна быть как можно больше, а кол-во областей как можно меньше;
  5. Области могут пересекаться;
  6. Возможно несколько вариантов накрытия.

Далее берём первую область и смотрим какие переменные не меняются в пределах этой области, выписываем конъюнкцию этих переменных, если неменяющаяся переменная нулевая, проставляем над ней инверсию. Берём следующую область, выполняем то же самое что и для первой, и т. д. для всех областей. Конъюнкции областей объединяем дизъюнкцией.
Например(для Карт на 2-ве переменные):

Karnough map 2 1 1.PNG Karnough map 2 1 2.PNG Karnough map 2 1 3.PNG Karnough map 2 1 4.PNG Karnough map 2 1 5.PNG Karnough map 2 1 6.PNG Karnough map 2 1 7.PNG Karnough map 2 1 8.PNG
overline{X1} overline{X2} overline{X1} X2 X1 X2 X1 overline{X2} overline{X2} overline{X1} {X2} {X1}
Karnough map 2 1 9.PNG Karnough map 2 1 10.PNG Karnough map 2 1 11.PNG Karnough map 2 1 12.PNG Karnough map 2 1 13.PNG Karnough map 2 1 14.PNG
S1vee S2 = S1vee S2 = S1vee S2 = S1vee S2 = S1vee S2 = S1vee S2 =
=X1X2vee =X1overline{X2}vee =X2vee X1 =X1veeoverline{X2} =overline{X1}veeoverline{X2} =X2vee overline{X1}
veeoverline{X1} overline{X2} veeoverline{X1}X2

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

Минимизация логической функции

Общей задачей минимизации логических
функций является отыскание минимальной
дизъюнктивной нормальной формы (МДНФ),
т.е. логической формы, содержащей
минимально возможное число букв и их
инверсий. Например, СДНФ (7) содержит
6*4=24 буквы.

Так, например, для некоторых логических
функций представ­ляется возможным
составить одну или несколько ДНФ,
содержащих меньшее, по сравнению с СДНФ,
число конъюнкций, которые могут не
включать некоторые аргументы или их
инверсии.

Существуют следующие методы минимизации
логических функций:

  1. Метод перебора.

  2. Метод Квайна.

  3. Метод Карно.

  4. Метод Вейча.

  5. Метод Мак-Класки.

Все методы минимизации логических
функций базируются на аксиомах и теоремах
алгебры логики.

Минимизация логической функции методом Карно

В методе Карно используются карты
(диаграммы) Карно, свойства которых
основаны на теореме полного склеивания.

Понятие карты Карно

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

Каждая клетка карты Карно соответствует
определенному набору таблицы истинности.
В каждую клетку записывается значение
функции соответствующего набора.

Аргументы функции располагаются по
внешним сторонам карты, напротив ее
столбцов и строк. Значение каждого
аргумента относится ко всему столбцу
или строке.

Каждый аргумент делит карту Карно на
две равные части:

  1. В одной половине, отмеченной скобкой,
    значение аргумента равно единице
    (прямое значение аргумента).

  2. В другой половине, значение аргумента
    равно нулю (инверсное значение аргумента).

Правило составления карты Карно

Карта Карно строится по следующему
правилу:

  1. Строится карта с числом клеток 2n,
    где n – ранг функции.

  2. По внешним сторонам карты определенным
    образом располагаются аргументы. При
    n>2 (n=3, 4,
    5) аргументы располагаются с перекрытием.

  3. Для каждого набора таблицы истинности
    отыскивается клетка карты.

  4. В найденную клетку записывается значение
    функции для данного набора.

Свойства карты Карно

Клетки карты, отличающиеся значением
только одной переменной, называются
соседними. К соседним клеткам применима
теорема полного склеивания: «два
логических выражения одного ранга,
отличающиеся вхождением только одной
переменной, склеиваются по этой
переменной».

Каждая клетка карты Карно имеет четыре
соседние клетки: верхнюю, нижнюю, левую
и правую.

Порядок выполнения работы

Для минимизации функции F
методом Карно даны три задания:

  1. Схема расположения аргументов карты
    Карно.

  2. Значения аргументов для заданной схемы.

  3. Переключательная функция F.

Схема расположения аргументов карты
Карно показана на рис. 7. Значения
аргументов для заданной схемы приведены
в таблице 4.

1

2

4

3

Рис. 7 — Схема расположения номеров
аргументов карты Карно

Таблица 4 Значения аргументов
для заданной схемы.

вар

схемы

Номер аргумента

1

2

3

4

0

0

X3

X2

X1

X0

Запишем аргументы Х3210
в карте Карно в соответствии с таблицей
4.

Х3

Х2

Х0

Х1

Рис. 8 — Схема расположения аргументов
карты Карно

Каждой клетке карты Карно можно поставить
в соответствие набор таблицы истинности.
Аргументы функции располагаются по
внешним сторонам карты напротив ее
столбцов и строк. Значение аргументов
Х3 и Х2 относится ко всем
столбцам, а значение аргументов Х1
и Х0 относится ко всем строкам
таблицы. Каждый аргумент делит карту
на две равные части: в одной части
аргументы равны единице (прямое значение),
в другой – нулю (инверсное значение).
Значения аргументов определяется
внешними скобками (линиями). Восемь
аргументов, расположенные напротив
каждой скобки, принимают прямое значение.
Остальные восемь аргументов принимают
инверсное значение.

Внешние скобки располагаются с
перекрытием, для обеспечения основного
свойства карты Карно: каждая клетка
карты имеет четыре соседние клетки
сверху, снизу, слева и справа. В соседних
клетках наборы аргументов отличаются
значением только одной переменной.

С учетом сворачиваемости карты в цилиндр
по горизонтали все крайние верхние
клетки являются соседними с крайними
нижними клетками. С учетом сворачиваемости
карты в цилиндр по вертикали все крайние
левые клетки являются соседними с
крайними правыми клетками.

Запишем в клетки функцию

с учетом значений аргументов, расположенных
на внешних сторонах карты.

Х3

Х2

Х0

Х1

Рис. 9 — Схема расположения функции в
карте Карно

Определим для каждой функции номер
набора: аргумент, входящий в функцию с
инверсией, принимает нулевое значение;
аргумент, входящий в функцию без
инверсии, принимает единичное.

Например, функция

соответствует набору 10102=1010.

Полученные номера наборов занесем в
клетки карты Карно, как показано на рис.
10.

Х3

Х2

0

4

12

8

Х0

1

5

13

9

Х1

3

7

15

11

2

6

14

10

Рис. 10 — Нумерация клеток карты Карно

У каждой клетки есть четыре соседние
клетки: верхняя, левая, нижняя и правая.

Рассмотрим следующие сочетания клеток:

10 -11

(9)

10-14

(10)

10-8

(11)

10-2

(12)

Вывод: у клетки номер 1010 есть
четыре соседние клетки: 11, 14, 8 и 2.

Запишем в клетки карты Карно значения
функции в соответствии с заданием

,
при i = 2, 8, 9, 12, 13, 14 (функция
принимает единичное значение на наборах
2, 8, 9, 12, 13, 14, а на остальных наборах —
нулевое значение).

Х3

Х2

0

0

1

1

Х0

0

0

1

1

Х1

0

0

0

0

1

0

1

0

Рис. 11 — Карта Карно функции

,
при i = 2, 8, 9, 12, 13, 14.

Определение по карте Карно конечных
конъюнкций выполняется по следующим
правилам:

  1. Все соседние единичные клетки должны
    быть заключены в прямоугольные единичные
    контуры.

  2. Число единиц в контуре должно выражаться
    числами 20=1, 21=2, 22=4,
    23=8 и т.д.

  3. Единичные контуры не должны содержать
    внутри себя нулей.

  4. Построение единичного контура следует
    начинать с единиц, которые могут войти
    только в один единственный контур.

  5. Одна и та же единица может входить в
    несколько единичных контуров.

  6. Единичные контуры могут накладываться
    друг на друга.

  7. Единичные контуры могут содержать
    разрыв на границе карты.

  8. Каждой единичной клетке соответствует
    исходная конъюнкция (конституент
    единицы) соответствующего набора.

  9. Увеличение размеров единичного контура
    приводит к уменьшению длины конечной
    конъюнкции.

  10. В единичном контуре, объединяющем две
    клетки, один из аргументов, меняющий
    свое значение, не входит в конечную
    конъюнкцию.

  11. В единичном контуре, объединяющем
    более двух клеток, в конечную конъюнкцию
    не входят аргументы, чьи границы
    пересекаются площадью, ограниченной
    данным контуром.

  12. Единичные клетки должны объединяться
    в наибольшие контуры.

  13. Количество контуров должно быть
    минимальным.

В соответствии с изложенными правилами
получаем три единичных контура (рис.
12).

Рис. 12 — Карта Карно с выделенными
единичными контурами.

Для выделенных контуров записываем
конечные конъюнкции

,
где i – номер контура; j
– длина конъюнкции (количество букв):

(13)

(14)

(15)

Из конечных конъюнкций составляем
выражение:

(16)

Подставляем в (16) значения конечных
конъюнкций из (13), (14) и (15) получаем ДНФ:

(17)

Выражение (17) является сокращенной ДНФ,
содержащей 9 букв.

Исходная СДНФ (7) содержала 24 буквы. В
результате минимизации функция сокращена
в 2,6 раз (24/9).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

Построение минимальных ДНФ

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

Определение 6.5. Булеву функцию g называют импликантой булевой функции f, если для любых наборов значений переменных из g=1 следует f=1.

Замечание 6.7. Напомним, что функции f и g можно рассматривать как функции от одного и того же числа переменных. Обозначая это число через n, можно так уточнить понятие импликанты: функция gin mathcal{P}_{2,n} есть импликанта функции gin mathcal{P}_{2,n} если для каждого набора awidetilde{alpha}inmathbb{B}^n из g(widetilde{alpha})=1 следует f(widetilde{alpha})=1. Термин «импликанта» естественным образом ассоциируется и с логической связкой, называемой импликацией, и с одноименной булевой функцией. Действительно, если д импликанта f, то из (gto f)=1 и g=1 следует, что f=1, т.е. истинно высказывание

(forallwidetilde{alpha}inmathbb{B}^n)bigl((g(widetilde{alpha})=1)Rightarrow (f(widetilde{alpha})=1)bigr).

Если функция f представлена СДНФ, то любая ее элементарная конъюнкция (констпигпуентпа единицы функции f) будет ее импликантой. Полезно заметить также, что если g_1 и g_2 — импликанты f, то дизъюнкция g_1lor g_2 также является импликантой f. Действительно, если g_1lor g_2=1, то g_1=1 или g_2=1. Но тогда, поскольку каждая из этих функций есть импликанта f, и g_1lor g_2 есть импликанта f.

Из определения 6.5 и понятия равных булевых функций (см. определение 6.2) следует, что булевы функции f и g равны, если и только если каждая из них служит импликантой другой: f=1Leftrightarrow g=1.

Определение 6.6. ДНФ называют минимальной, если она содержит наименьшее число литералов среди всех ДНФ, эквивалентных ей.

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

Пример 6.10. ДНФ x_1x_2lor overline{x}_1x_2 не является минимальной, так как ее можно преобразовать к эквивалентной ДНФ, не содержащей ни одного из литералов widetilde{x}_1:

x_1x_2lor overline{x}_1x_2=(x_1lorwidetilde{x}_1)x_2=x_2,.

Вместо четырех литералов в исходной ДНФ получаем ДНФ, состоящую из одного литерала.
Определение 6.7. Длиной ДНФ называют число входящих в нее элементарных конъюнкций.
ДНФ называют кратчайшей, если она имеет наименьшую длину среди всех эквивалентных ей ДНФ.

Заметим, что кратчайшая ДНФ не обязана быть в то же время минимальной среди всех ДНФ, эквивалентных исходной функции. Но поиск минимальных ДНФ, как мы сейчас увидим, проводится среди кратчайших ДНФ.

Наша задача состоит в том, чтобы описать метод построения минимальной ДНФ, эквивалентной заданной булевой функции. Мы рассмотрим простейший метод такого рода, основанные на алгоритме Квайна — Мак-Клоски. Этот алгоритм исходит обязательно из СДНФ, которая строится по таблице функции так, как это было описано ранее.


Алгоритм Квайна–Мак-Клоски

Опишем последовательно этапы, составляющие алгоритм Квайна–Мак-Клоски.

1. Склейка. Пусть K_1 и K_2 — две элементарные конъюнкции, входящие в исходную СДНФ Ф, которая представляет функцию f, причем для некоторого переменного x и некоторой элементарной конъюнкции K выполняются равенства K_1=xK и K_2=overline{x}K. Тогда имеем, согласно тождествам булевой алгебры,

K_1lor K_2=xKlor overline{x}=(xlor overline{x})K=K,.

Мы получаем элементарную конъюнкцию K, которая содержит на один литерал меньше, чем K_1 и K_2, и является, как и обе конъюнкции K_1 и K_2, импликантой f. Образно говоря, мы «склеили» две импликанты в одну, в которой число литералов на единицу меньше.

Операцию получения K по K_1 и K_2, описанную выше, можно провести и для любых двух элементарных конъюнкций подобного вида, составляющих любую ДНФ, эквивалентную исходной функции. Такую операцию называют простой склейкой импликант K_1 и K_2 по переменному x.

Установим геометрический смысл простой склейки* (с точки зрения структуры, или «геометрии», булева куба).

Из доказательства теоремы о представлении булевой функции в виде ДНФ (см. теорему 6.2) мы знаем, что существует взаимно однозначное соответствие между множеством элементарных конъюнкций СДНФ, представляющей функцию f, и множеством C_f^1 ее конституент единицы. Это соответствие, напомним, таково, что каждому набору widetilde{alpha}=(alpha_1,ldots,alpha)in C_f^1 отвечает элементарная конъюнкция K_{widetilde{alpha}}=x_{1}^{alpha_1}cdotldots x_{n}^{alpha_n}, принимающая значение 1 только на наборе widetilde{alpha}. Тогда простая склейка может быть применена только к таким двум элементарным конъюнкциям K_{widetilde{alpha}} и K_{widetilde{beta}}, соответствующим наборам widetilde{alpha}, widetilde{beta}in C_f^1, что для некоторого i~(1leqslant ileqslant n)

begin{aligned}widetilde{alpha}&= (alpha_1,ldots, alpha_{i-1},alpha_{i}, alpha_{i+1}, ldots, alpha_{n}),\[2pt] widetilde{beta}&= (alpha_1,ldots, alpha_{i-1}, overline{alpha}_{i}, alpha_{i+1}, ldots, alpha_{n}).end{aligned}

Это значит, что наборы widetilde{alpha}, widetilde{beta} таковы, что один из них доминирует над другим (они различаются значением только одной компоненты), т.е. они образуют ребро булева куба mathbb{B}^n.

Следовательно, простой склейке, применяемой к элементарным конъюнкциям исходной СДНФ, представляющей функцию f, подлежат те и только те элементарные конъюнкции, которые соответствуют элементам какого-либо ребра булева куба, на котором функция f принимает единичное значение. Образно говоря, две соседние вершины куба, на которых функция равна 1, псклеиваются» в ребро, их «соединяющее».

С алгебраической же точки зрения мы из двух элементарных конъюнкций K_{widetilde{alpha}} и K_{widetilde{beta}} получаем новую элементарную конъюнкцию x_{1}^{alpha_1}ldots x_{i-1}^{alpha_{i-1}} x_{i+1}^{alpha_{i+1}}ldots x_{n}^{alpha_n}, лишенную литерала x_{i}^{alpha_i}.

Итак, применяя простую склейку к исходной СДНФ Phi, получаем новую ДНФ Phi_1; к ней также применяем простую склейку — получаем ДНФ Phi_2; продолжаем выполнять эту операцию до тех пор, пока не окажется, что для некоторого k в ДНФ Phi_k уже нельзя склеить никакие две элементарные конъюнкции. Такое k всегда найдется, так как СДНФ Phi состоит из конечного числа элементарных конъюнкций, а они, в свою очередь, состоят из конечного числа литералов. Полученную в результате ДНФ Phi_k называют сокращенной ДНФ функции f, а ее элементарные конъюнкции — простыми импликантами булевой функции f.

Замечание 6.8. Понятие простой импликанты определено через процедуру многократного повторения простой склейки. Иногда простую импликанту булевой функции f определяют независимо от понятия о склейке как такую элементарную конъюнкцию в составе некоторой ДНФ, представляющей функцию f, что удаление из нее любого литерала лишает ее свойства «быть импликантой». Например, конъюнкция x_1x_2 overline{x}_3 не является простой импликантой мажоритарной функции, так как из ее СДНФ (6.9) можно удалить литерал overline{x}_3 и получить конъюнкцию x_1x_2, которая будет снова импликантой функции, но уже, как будет показано далее, простой.

Можно доказать, что эти два определения простой импликанты равносильны.


Геометрия описанного выше многократного повторения простой склейки, как можно показать, состоит в дальнейшем «склеивании» каждой пары соседних ребер {граней размерности 1), на которых значение функции равно 1, в грани размерности 2, соседних граней размерности 2 в грани размерности 3 и т.д. Разбираемый ниже пример поясняет эту идею.

Пример 6.11. Зададим функцию f от трех переменных следующей СДНФ:

f=overline{x}_1overline{x}_2overline{x}_3lor overline{x}_1overline{x}_2 x_3lor x_1overline{x}_2overline{x}_3lor x_1overline{x}_2x_3,.

(6.11)

Подвергнем простой склейке первую и третью, а также вторую и четвертую элементарные конъюнкции в (6.11):

f=overline{x}_2overline{x}_3loroverline{x}_2x_3,.

(6.12)

Склейка первой и третьей конъюнкций в формуле

С геометрической точки зрения склейка первой и третьей конъюнкций в формуле (6.11) означает, что функция f принимает единичное значение на ребре [000,100] (рис. 6.6), а склейка второй и четвертой конъюнкций точно так же определяет ребро [001,101], Эти ребра являются соседними, и, кроме того, оказывается, что функция / принимает единичное значение и на другой паре соседних ребер: [000, 001] и [100,101]. Здесь сказывается существенное отличие «геометрии» булева куба от классической: в булевом кубе ребро — это пара вершин, между которыми нет никаких «точек». Тогда любая пара соседних ребер образует грань размерности 2, любая пара соседних граней размерности 2 образует грань размерности 3 и т.д. Таким образом, если функция принимает единичное значение на двух соседних ребрах булева куба, то она равна 1 в любой точке образуемой ими грани размерности 2, если она равна 1 на двух параллельных соседних гранях размерности 2, то она равна 1 на соответствующей грани размерности 3 и т.д.

Применяя простую склейку к (6.12) (по переменному x_3), получаем f(x_1,x_2,x_3)=overline{x}_2. Побочным результатом склейки явилось и удаление фиктивных переменных функции x_1 и x_3.

Пример 6.12. Рассмотрим СДНФ мажоритарной функции (6.9).
Имеем следующие склейки:

overline{x}_1x_2x_3lor x_1x_2x_3=x_2x_3,qquad x_1overline{x}_2x_3lor x_1x_2x_3=x_1x_3,qquad x_1x_2overline{x}_3lor x_1x_2x_3=x_1x_2.

В данном случае сразу получаем сокращенную ДНФ: Phi_1=x_1x_2lor x_1x_3lor x_2x_3.


Карты Карно

Для булевых функций от трех и четырех переменных процедура склейки наглядно и просто выполняется на так называемых картах Карио. Форма карт Карно, представляющих собой прямоугольные таблицы, для функции от трех переменных показана на рис. 6.7, а для функции от четырех переменных — на рис. 6.8. На рис. 6.7 строки отмечены наборами значений переменного x_1, а столбцы — x_2,x_3, а на рис. 6.8 строки — наборами значений переменных x_1,x_2, а столбцы — x_3,x_4.

Форма карт Карно для функций от трех и четырёх переменных

Карта Карно есть не что иное, как форма таблицы для определения булевой функции. Каждая клетка карты задается своим набором значений переменных, причем в клетках, соответствующих конституентам единицы данной функции, ставится единица, тогда как остальные клетки остаются пустыми. Карта Карно устроена так, что наборы, определяющие любые две соседние клетки, различаются в точности в одной позиции (т.е. различаются значениями ровно одной компоненты), причем клетки (одной и той же строки или одного и того же столбца), примыкающие к противоположным сторонам прямоугольника, также являются соседними в только что определенном смысле. Это можно представить себе так, что карта закручивается» в цилиндр» по обоим направлениям, т.е. в «тор».

С геометрической точки зрения карта Карно есть способ изображения булева куба (размерностей 3 и 4). Любая пара соседних клеток (с учетом «закрученности» карты) определяет некоторое ребро булева куба, а любой прямоугольник, состоящий из 2^k клеток (или, как говорят, прямоугольник с площадью 2^k) для некоторого k, определяет грань размерности k.

Можно построить карты Карно и для размерностей 5 и 6, но они используются весьма редко. Может быть построена и простейшая карта Карно для функции от двух переменных, но для таких функций не возникает нетривиальных задач построения минимальной ДНФ.

Пусть булева функция f задана таблицей, представленной в форме карты Карно. Описанный выше итерационный процесс склейки, в результате которого получается сокращенная ДНФ, представляющая функцию f, проводится на карте Карно так: любые две соседние клетки, содержащие единицы, обводятся, и «поглотивший» их прямоугольник (он и есть обозначение результата склейки на карте) представляется словом, содержащим «0», «1» и «×» («крестик»), причем «крестик» занимает позицию того переменного, по которому произведена склейка (рис. 6.9).

Булева функция, заданая таблицей, представленной в форме карты Карно

С геометрической точки зрения такой прямоугольник площади 2 соответствует ребру булева куба, в каждой вершине которого функция принимает значение 1. Запись прямоугольника в виде слова можно понимать как обозначение соответствующего ребра. Так, на карте, показанной на рис. 6.9, прямоугольник 11× обозначает ребро [110,111], прямоугольники же 1×1 и ×11 — ребра [101,111] и [011,111] соответственно.

По таким обозначениям легко получить и ту импликанту, которая является результатом простой склейки: для этого достаточно записать литерал x_i (соответственно overline{x}_i), если в i-й позиции стоит 1 (соответственно 0), и пропустить литерал ж», если в i-й позиции стоит «крестик». Так, по слову 1×0 получим импликанту x_1overline{x}_3.

Наличие на карте Карно двух прямоугольников площади 2, находящихся в соседних столбцах или строках, показывает, что функция принимает значение 1 на некоторой паре соседних ребер, т.е. на некоторой грани размерности 2. Тогда они могут быть объединены в один большой прямоугольник площади 4 (рис. 6.10).

Наличие на карте Карно двух прямоугольников площади и их объединение

Этот прямоугольник можно записать в виде слова хОх, показывая тем самым, что соответствующая грань (размерности 2) образована любой из двух пар соседних ребер: (×00, ×01) (два вертикальных прямоугольника площади 2) или (00×, 10×) (два горизонтальных прямоугольника площади 2).

Точно так же можно объединять в один прямоугольник площади 8 два соседних прямоугольника площади 4 (рис. 6.11).

Карты Карно

Если такие большие прямоугольники находить сразу, то «поглощаемые» ими меньшие прямоугольники уже не рассматриваются. Тем самым, находя на карте Карно прямоугольники максимальной площади и не содержащиеся друг в друге, мы находим грани максимальных размерностей и максимальные по включению, такие, на которых заданная функция принимает единичное значение. Поскольку грань размерности k имеет 2^k вершин, то выделяемые описанным способом прямоугольники могут состоять только из 2^k клеток (для некоторого k, не превышающего числа переменных). Так, на карте, приведенной на рис. 6.12, получим два прямоугольника площади 4: ×0×0 и 0×0×, соответствующие граням размерности 2, и один прямоугольник 01×1, отвечающий ребру, которое не содержится ни в одной из указанных выше граней. Подчеркнем еще раз, что соседство клеток, прямоугольников и само выделение прямоугольников на карте Карно производится с учетом ее «закрученности». В этой связи интересен » прямоугольник» на карте, приведенной на рис. 6.12, обозначенный ×0×0. Он образован двумя парами противоположных угловых клеток.

Таким образом, если на карте Карно сразу выделять все максимальные (в указанном выше смысле) прямоугольники площади 2^k (для некоторого kgeqslant0 и не превышающего числа переменных), то тем самым мы «геометрически» реализуем описанный ранее алгебраический итерационный процесс склейки и в результате получаем все простые импликанты исходной функции (составляющие сокращенную ДНФ). Эти импликанты восстанавливаются по записям прямоугольников точно так же, как описано выше для простой склейки. Так, для карты, приведенной на рис. 6.12, получим сокращенную ДНФ в виде

overline{x}_2 overline{x}_4lor overline{x}_1 overline{x}_3lor overline{x}_1x_2x_4,.

2. Определение ядра. Говорят, что элементарная конъюнкция K покрывает элементарную конъюнкцию L (и пишут Ksucc L), если любой литерал, входящий в K, входит в L. Так,

x_1x_2succ x_1x_2x_3,qquad x_1x_3succ x_1 overline{x}_2x_3, но x_1x_3nsucc x_1x_2overline{x}_3.

Поскольку вторая конъюнкция содержит литерал overline{x}_3, отсутствующий в первой конъюнкции. Легко понять, что если Ksucc L, то Klor L=K (согласно тождествам поглощения).

Каждая входящая в сокращенную ДНФ простая импликанта покрывает некоторую элементарную конъюнкцию исходной С ДНФ. На карте Карно этому отвечает прямоугольник, п закрывающий» соответствующую единицу.

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

Множество всех ядровых импликант (склеек) сокращенной ДНФ называют ядром.


Пример 6.13. а. У мажоритарной функции все импликанты являются ядровыми. Напротив, у функции, изображенной на карте Карно на рис. 6.13, ядро пусто, т.е. ядровых импликант нет вовсе.

Две карты Карно

б. На карте Карно на рис. 6.14 в ядро попадают склейки 0times,times1,~ 0times1times,~ 1times00.

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

В остальных случаях переходят к отысканию так называемых тупиковых ДНФ.


3. Перечисление тупиковых ДНФ. Простую импликанту называют избыточной (относительно некоторой ДНФ, содержащей только простые импликанты и эквивалентной исходной СДНФ), если ее можно удалить из этой ДНФ без потери эквивалентности ее исходной СДНФ. Так, сокращенная ДНФ (см. рис. 6.14) содержит избыточные импликанты: импликанта, соответствующая прямоугольнику 10times0, или импликанта, соответствующая прямоугольнику times010, может быть удалена (но не обе сразу!). Это значит, что каждая из этих импликант является избыточной относительно сокращенной ДНФ, но удаление одной из них приводит к новой ДНФ, относительно которой вторая из упомянутых импликант уже не будет избыточной. В том случае, когда каждую элементарную конъюнкцию исходной СДНФ покрывает некоторая ядровая импликанта, импликанты, не вошедшие в ядро, можно удалить одновременно.

Тогда можно представить процесс пошагового удаления избыточных импликант, начиная с сокращенной ДНФ, в результате которого получится некоторая ДНФ, уже не содержащая ни одной избыточной склейки.

Любую ДНФ, эквивалентную исходной СДНФ, содержащую все ядровые импликанты и не содержащую ни одной избыточной импликанты, называют тупиковой.

Заметим, что в силу конечности множества всех импликант тупиковая ДНФ обязательно существует, т.е. в упомянутом выше процессе мы рано или поздно доберемся до такого момента, когда удаление хотя бы одной склейки приведет к тому, что «откроется» какая-то единичная клетка на карте Карно и тем самым будет потеряна эквивалентность полученной таким образом ДНФ исходной СДНФ.

Для СДНФ, карта Карно которой приведена на рис. 6.14, имеются две тупиковые ДНФ (первые три конъюнкции соответствуют ядру):

begin{gathered}overline{x}_1x_4lor overline{x}_1x_3lor x_1overline{x}_3cdot overline{x}_4lor overline{x}_2 x_3 overline{x}_4,\[2pt] overline{x}_1x_4lor overline{x}_1x_3lor x_1overline{x}_3cdot overline{x}_4lor x_1overline{x}_2cdot overline{x}_4. end{gathered}

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

Присвоим каждой простой импликанте сокращенной ДНФ некоторое имя: т.е. обозначим их, например, как K_1,K_2,ldots,K_m. Для любой единицы карты Карно, не покрываемой ядром, перечислим все простые импликанты, которые ее покрывают, записав их в виде элементарной дизъюнкции, в которой переменными считаются введенные выше имена простых импликант. Переменное, именующее данную простую импликанту, принимает, по определению, значение 1, если данная простая импликанта выбирается для покрытия рассматриваемой единицы
карты Карно.

Записав все элементарные дизъюнкции, составим из них КНФ. Рассмотрим карту Карно на рис. 6.13. Обозначив

begin{array}{lll}K_1=x_1overline{x}_2(10times),&qquad K_2= overline{x}_2 x_3(times01), &qquad K_3= overline{x}_1x_3(0times1),\[2pt] K_4= overline{x}_1 x_2(01times), &qquad K_5=x_2overline{x}_3(times10),&qquad K_6= x_1overline{x}_3(1times0), end{array}

получим

(K_1lor K_6)land (K_1lor K_2)land (K_2lor K_3)land (K_3lor K_4)land (K_4lor K_5)land (K_5lor K_6).

(6.13)

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

Для нашего примера поступим так: вычислим конъюнкцию первой и второй скобки в выражении (6.13), а также третьей и четвертой, пятой и шестой скобок, после чего получим

begin{aligned}(K_1lor K_1 K_2lor K_6 K_1lor K_6 K_2) &land (K_2 K_3lor K_2 K_4lor K_3lor K_3 K_4)land\[2pt] &land (K_4 K_5lor K_4 K_6lor K_5lor K_5 K_6). end{aligned}

(6.14)

Используя тождества поглощения, в первой скобке в формуле (6.14) мы можем удалить все члены, содержащие K_1, во второй скобке — все члены, содержащие K_3, в третьей скобке — все члены, содержащие K_5. Проделав это, раскрыв все три скобки и применив еще раз поглощение, окончательно получим

K_1 K_3 K_5lor K_1 K_3 K_4 K_6lor K_1 K_2 K_4 K_5lor K_2 K_3 K_5 K_6lor K_2 K_4 K_6.

(6.15)

Элементарные конъюнкции в (6.15) определяют тупиковые ДНФ. Более того, так как в данном случае отсутствуют ядровые импликанты, найденные конъюнкции исчерпывают тупиковые ДНФ. Первая тупиковая ДНФ состоит из конъюнкций K_1,,K_3 и K_5, т.е. имеет вид x_1 overline{x}_2lor overline{x}_1x_3lor x_2 overline{x}_3. Точно так же определяются остальные тупиковые ДНФ.

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

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


4. Отыскание среди тупиковых ДНФ кратчайших и минимальных. Среди найденных тупиковых ДНФ находят кратчайшие и минимальные. Можно легко показать, что минимальная ДНФ всегда является кратчайшей, но обратное неверно. Так, x_1x_2loroverline{x}_2=x_1lor overline{x}_2 и первая ДНФ кратчайшая, но не минимальная. Действительно, легко сообразить, что вторая из записанных ДНФ минимальна. Следовательно, представляемую ею функцию нельзя представить ДНФ, содержащей менее двух элементарных конъюнкций. Но в первой ДНФ три литерала, а во второй — два. Из пяти тупиковых ДНФ, соответствующих функции Патрика (6.15), кратчайшими являются две. Каждая из них минимальна, так как обе они имеют одинаковое число литералов.

Карта Карно

Пример 6.14. Рассмотрим карту Карно на рис. 6.15. В результате проведения склейки получим следующую сокращенную ДНФ*:

overline{x}_1overline{x}_3lor overline{x}_1overline{x}_2lor overline{x}_2 overline{x}_4lor overline{x}_2overline{x}_3lor overline{x}_3x_4lor x_1x_2x_4lor x_1x_2x_3lor x_1x_3overline{x}_4,.

Ядро составляют склейки (простые импликанты) overline{x}_1overline{x}_3 и overline{x}_1overline{x}_3.

Шесть клеток, содержащих единицу, на карте Карно остаются непокрытыми ядровыми склейками. Для неядровых склеек (обозначенных K_1,ldots,K_6) составляем функцию Патрика в виде

(K_3lor K_4) (K_4lor K_5) (K_5lor K_6) (K_1lor K_2) (K_2lor K_3) (K_1lor K_6).

Преобразуя ее аналогично функции (6.13), получаем

K_1K_3K_5lor K_2K_4K_6lor K_2K_3K_5K_6lor K_1K_2K_4K_5lor K_1K_3K_4K_6,.

Имеем, следовательно, пять тупиковых ДНФ. Запишем их, для наглядности, так:

underbrace{overline{x}_1overline{x}_3lor overline{x}_1 overline{x}_2}_{text{yadro}}lor begin{cases}overline{x}_2overline{x}_4lor overline{x}_3x_4lor x_1x_2x_3,\ overline{x}_2overline{x}_3lor x_1x_2x_4lor x_1x_3overline{x}_4,\ overline{x}_2 overline{x}_3lor overline{x}_3x_4lor x_1x_2x_3lor x_1x_3overline{x}_4,\ overline{x}_2 overline{x}_4lor overline{x}_2overline{x}_3lor x_1x_2x_4lor x_1x_2x_3,\ overline{x}_2 overline{x}_4lor overline{x}_3x_4lor x_1x_2x_4lor x_1x_3overline{x}_4. end{cases}

Из этих пяти тупиковых ДНФ кратчайшими являются первая и вторая. Из них, в свою очередь, минимальной является первая, так как она содержит на один литерал меньше. В итоге получаем минимальную ДНФ в виде

overline{x}_1overline{x}_3lor overline{x}_1overline{x}_2lor overline{x}_2 overline{x}_4lor overline{x}_3x_4lor x_1x_2x_3,.

«Обратим еще раз внимание на то, что каждый выделяемый прямоугольник на карте Карно имеет площадь, равную некоторой степени двойки. Поэтому, например, три соседние единичные клетки не могут быть объединены в один прямоугольник, а их «накроют» два прямоугольника площадью 2, пересекающиеся по одной клетке.

В данном случае минимальная ДНФ оказалась единственной, хотя, как это мы видели в ранее разобранных примерах, в общем случае могут существовать несколько минимальных ДНФ.


Метод Блейка

Техника карт Карно является удобным и наглядным (при определенных ограничениях на число переменных минимизируемой функции) способом реализации алгоритма Квайна–Мак-Клоски. Но существуют и другие способы проведения склейки, т.е. получения сокращенной ДНФ для исходной функции. Одним из таких способов является чисто алгебраический метод Блейка, состоящий в том, что к любой ДНФ, представляющей функцию, применяются следующие тождества:

begin{cases}xK_1lor overline{x}K_2= xK_1lor overline{x}K_2lor K_1K_2,\ K_1lor K_1K_2=K_1.end{cases}

Первое из тождеств (6.16) называют тождеством (или правилом) обобщенного склеивания, второе — тождеством (или правилом) поглощения.

«Технология» использования метода Блейка такова: применяют тождество обобщенного склеивания до тех пор, пока не перестанут появляться новые элементарные конъюнкции (вида К1К2). После этого применяют тождество поглощения.


Таблицы Квайна

Как только сокращенная ДНФ тем или иным способом найдена, приступают к нахождению ядра. Ядро можно определить (без использования карты Карно) с помощью так называемой таблицы Квайна. Столбцы этой таблицы соответствуют элементарным конъюнкциям исходной СДНФ, а строки — простым импликантам сокращенной ДНФ. На пересечении строки и столбца проставляется знак «+» (плюс), если простая импликанта данной строки покрывает элементарную конъюнкцию данного столбца. Ядро вычисляется так: отмечаем столбцы с единственным знаком «+», тогда простые импликанты тех и только тех строк, в которые попал этот знак, образуют ядро. Для примера 6.13.6 (см. рис. 6.14) получим таблицу Квайна, изображенную на рис. 6.16. (В целях экономии места элементарные конъюнкции в таблице заменены цифровыми обозначениями соответствующих вершин и граней булева куба — точно так же как при обозначении прямоугольников на картах Карно. Ядровые импликанты выделены жирным шрифтом.)

Таблица Квайна

По таблице Квайна можно составить и функцию Патрика для перечисления тупиковых ДНФ. Для этого нужно отметить все столбцы таблицы, в которых на пересечении со строками, соответствующими ядровым импликантам, не стоит знак «+». Для разбираемого примера таковым является только последний столбец. Чтобы покрыть соответствующую элементарную конъюнкцию СДНФ, можно выбрать одну из двух простых импликант: x_1 overline{x}_2 overline{x}_4 или overline{x}_2x_3overline{x}_4.


Построение минимальных ДНФ частичных булевых функций

В заключение рассмотрим очень кратко применение карт Карно к построению минимальных ДНФ частичных булевых функций, т.е. частичных отображений из множества {0;1}^n в множество {0;1}.

Частичная булева функция может быть задана посредством карты Карно, в которой кроме клеток с единицами и пустых клеток будут клетки, заполненные прочерками (–). Такой прочерк означает, что на соответствующем наборе функция не определена.

Склейка для частичной функции (заданной картой Карно) проводится таким образом, что выделяются прямоугольники максимальной площади (содержащие 2^k клеток, для некоторого k), каждая клетка которых содержит либо единицу, либо прочерк, причем существует по крайней мере одна единичная клетка.

Пример 6.15. Пусть частичная функция f(x_1,x_2,x_3) задана картой Карно, приведенной на рис. 6.17. Прямоугольник максимальной площади (равной 4), состоящий из единицы и прочерков, записывается как 0times,times. Следовательно, минимальная ДНФ для заданной функции будет overline{x}_1.

Частичная булевая функция, заданная картой Карно

По поводу рассмотренного примера возникает такой вопрос: почему не принят во внимание другой прямоугольник (площади 2), содержащий клетку с единицей и клетку с прочерком: times00? Связано это вот с чем. Перед тем как выделять упомянутые выше прямоугольники, мы на самом деле доопределяем исходную частичную функцию (получая обычную булеву функцию) так, чтобы в максимальном числе клеток, в которых стоят прочерки (но не нули!), появились единицы. Точнее говоря, среди прямоугольников (с прочерками), содержащих данную единицу, выбирают для замены прочерков единицами такой, который имеет максимальную площадь. Прочерки же в остальных прямоугольниках заменяют нулями.

В примере 6.15 мы доопределяем исходную функцию так, что получается функция f_1, задаваемая картой Карно, приведенной на рис. 6.18. Эта функция имеет минимальную ДНФ overline{x}_1. Следовательно, и частичная исходная функция может быть представлена такой ДНФ, поскольку на всех наборах, на которых она определена, она принимает такое же значение, как и функция f_1.

Карты Карно 2

Конечно, мы могли бы доопределить функцию f по-другому, так, чтобы получилась функция f_2, заданная картой Карно, приведенной на рис. 6.19. Ясно, что f_2= overline{x}_2overline{x}_3 поэтому и частичная функция f может быть определена такой ДНФ. Но эта ДНФ не минимальна для данной частичной (именно частичной!) функции, поскольку первый способ доопределения дал ДНФ, содержащую лишь один литерал.

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

Пример 6.16. Для карты на рис. 6.20 следует взять обе склейки на четыре позиции: 00times,times и times,times00, получив для заданной этой картой частичной функции минимальную ДНФ в виде overline{x}_1 overline{x}_2lor overline{x}_3 overline{x}_4.

Карта Карно булевой функции четырех переменных

Заметим, что без использования склеек с прочерками мы вообще не могли бы минимизировать данную функцию. Нужно также отметить, что не всегда использование «частичности» функции позволяет получить минимальную ДНФ для нее. Так, на представленной на рис. 6.20 карте в случае, если мы переместим нижнюю единицу на строку выше, обычная склейка на две позиции дает лучший результат: overline{x}_1overline{x}_3overline{x}_4, а записанная выше ДНФ уже не будет минимальной (и даже кратчайшей).

Математический форум (помощь с решением задач, обсуждение вопросов по математике).

Кнопка "Поделиться"

Если заметили ошибку, опечатку или есть предложения, напишите в комментариях.

Минимизация булевых функций

Ясно, что при разработке логических схем, немаловажной является задача минимизации количества используемых элементов (другими словами, логических операций).

В связи с этим, возникает задача минимизации логических функций в некотором классе формул. В частности, в классах ДНФ и КНФ.

Минимальная ДНФ
Такая ДНФ, которая содержит наименьшее общее число вхождений переменных по сравнению со всеми равносильными ей ДНФ.
Минимальная КНФ
Такая КНФ, которая содержит наименьшее общее число вхождений переменных по сравнению со всеми равносильными ей КНФ.

Процесс нахождения минимальных форм, собственно, и называется минимизацией. В простых случаях, для минимизации достаточно тождественных преобразований. В более сложных – используются специальные алгоритмы.

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

[
;overline{x_1};x_2x_3x_4
vee
;overline{x_1};x_2;overline{x_3};x_4 =
;overline{x_1};x_2x_4 (x_3 vee;overline{x_3};) =
;overline{x_1};x_2x_4 mathbin{&}1 =
;overline{x_1};x_2x_4.
]

Аналогично для КНФ:

[
(;overline{x_1};vee x_2vee x_3vee x_4)
(;overline{x_1};vee x_2vee;overline{x_3};vee x_4) =
;overline{x_1};vee x_2vee x_4vee x_3;overline{x_3}; =
;overline{x_1};vee x_2vee x_4vee 0 =
;overline{x_1};vee x_2vee x_4.
]

Возможность поглощения следует из очевидных равенств

[
A vee;overline{A}; = 1
]
[
A;overline{A}; = 0.
]

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

Минимизирующие карты Карно

Карта Карно

Графический способ минимизации булевых функций. Представляет собой операции попарного неполного склеивания и элементарного поглощения. Карты Карно рассматриваются как построенная соответствующим образом таблица истинности функции.

Карты Карно можно рассматривать как определенную плоскую развертку n-мерного булева куба.

Карты Карно были изобретены в 1952 Эдвардом В. Вейчем и усовершенствованы в 1953 Морисом Карно, физиком из «Bell Labs», и были призваны помочь упростить цифровые электронные схемы.

В карту Карно булевы переменные передаются из таблицы истинности и упорядочиваются с помощью кода Грея, в котором каждое следующее число отличается от предыдущего только одним разрядом.

Булевы функции (N) переменных, представленные в виде СДНФ или СКНФ, могут иметь в своём составе (2^N) различных элементарных членов.

Элементарные члены СДНФ или СКНФ образуют структуру, топологически эквивалентную (N)-мерному кубу. Действительно, если рассматривать набор значений функции (x_1,,ldots,,x_N) как (N)-мерный вектор ({x_1,,ldots,,x_N}), мы получим набор точек, лежащих на ортах (N)-мерной системы координат, и удаленных друг от друга на (1). Другими словами, мы получим (N)-мерный гиперкуб с ребром (1).

Например, для функции двух переменных, заданной таблицей истинности:

(x_1) (x_2) (f(x_1,x_2))
0 0 0
0 1 0
1 0 1
1 1 1

можно построить эквивалентный ей квадрат:

0 01 1 11 0 00 1 10

Или, если обозначить вершины соответствующими элементарными конъюнкциями и выделить вершины, конъюнкции которых входят в СДНФ:

0 x̅₁x₂ 1 x₁x₂ 0 x̅₁x̅₂ 1 x₁x̅₂

Или СКНФ:

0 x₁∨x̅₂ 1 x̅₁∨x̅₂ 0 x₁∨x₂ 1 x̅₁∨x₂

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

При этом, сохраняются переменные, значение которых на стороне постоянно.

В случае функции трёх переменных приходится иметь дело с трёхмерным кубом. Это сложнее и менее наглядно, но технически возможно. На рисунке в качестве примера показана таблица истинности для булевой функции трёх переменных и соответствующий ей куб.

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

[
;overline{x_1};;overline{x_2};;overline{x_3};
vee
x_1;overline{x_2};;overline{x_3};
vee
;overline{x_1};;overline{x_2};x_3
vee
x_1;overline{x_2};x_3
=]

[ =
;overline{x_2}; (;overline{x_1};;overline{x_3}; vee;overline{x_1};x_3 vee x_1;overline{x_3}; vee x_1x_3)
= ;overline{x_2}; (;overline{x_1}; vee x_1)(;overline{x_3}; vee x_3) = ;overline{x_2};
]

В общем случае можно сказать, что (2^K) членов, принадлежащие одной (K)–мерной грани гиперкуба, склеиваются в один член, при этом поглощаются (K) переменных.

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

1 x̅₁x̅₂x̅₃ 1 x̅₁x̅₂x₃ 0 x̅₁x₂x̅₃ 0 x̅₁x₂x₃ 0 x₁x₂x₃ 0 x₁x₂x̅₃ 1 x₁x̅₂x₃ 1 x₁x̅₂x̅₃

Карта Карно является представлением такой двумерной развертки в виде таблицы.

(_{x_3}backslash^{x_1x_2}) (00) (01) (11) (10)
(0) (1) (0) (0) (1)
(1) (1) (0) (0) (1)

В этой карте самые левые ячейки смежны самым правым.

Ясно, что на одной (K)-мерной грани могут лежать (2^K) вершин. Следовательно, в карте Карно выбираются группы по (2^K) смежных ячеек, и в результирующую ДНФ или КНФ входят только те переменные, которые неизменны в рамках данной группы. Общее число членов соответствует числу групп в карте Карно, а число неизменных переменных обратным образом зависит от количества элементов в группе. Как следствие, группы необходимо выбирать как можно более большими. Следует отметить, что одна комбинация переменных может входить в несколько групп.

Для функций четырех переменных, требуется развертка 4-мерного гиперкуба. Карта Карно в таком случае имеет вид:

(_{x_3x_4}backslash^{x_1x_2}) (00) (01) (11) (10)
(00) (f(0,0,0,0)) (f(0,1,0,0)) (f(1,1,0,0)) (f(1,0,0,0))
(01) (f(0,0,0,1)) (f(0,1,0,1)) (f(1,1,0,1)) (f(1,0,0,1))
(11) (f(0,0,1,1)) (f(0,1,1,1)) (f(1,1,1,1)) (f(1,0,1,1))
(10) (f(0,0,1,0)) (f(0,1,1,0)) (f(1,1,1,0)) (f(1,0,1,0))

В данном случае, все крайние ячейки смежны друг другу. Это можно себе представить, натянув эту развертку на тор (“бублик”):

Возможно так же построение карт Карно для функций 5 и 6 переменных, однако работа с ними значительно затрудена. Для числа переменных, большего 6, использование карт Карно попросту непрактично.

Пример

Рассмотрим функцию, имеющую следующую таблицу истинности:

(x_1) (x_2) (x_3) (x_4) (f(x_1, x_2, x_3, x_4))
0 0 0 0 1
0 0 0 1 1
0 0 1 0 1
0 0 1 1 0
0 1 0 0 1
0 1 0 1 0
0 1 1 0 1
0 1 1 1 1
1 0 0 0 0
1 0 0 1 0
1 0 1 0 0
1 0 1 1 0
1 1 0 0 0
1 1 0 1 0
1 1 1 0 1
1 1 1 1 1

Перепишем эту таблицу в виде карты Карно:

x₃x₄x₁x₂ 00 01 11 10
00 1 1 0 0
01 1 0 0 0
11 0 1 1 0
10 1 1 1 0

Легко выделяются три группы. Исходя из этого, записывается ДНФ:

(;overline{x_1};;overline{x_2};;overline{x_3};)(vee)(;overline{x_1};;overline{x_4};)(vee)({x_2}{x_3})

Метод Куайна-МакКласки

Метод Куайна-МакКласси строится на основе того же аппарата, что и карты Карно, однако оказывается более практичным для большего количества переменных.

Алгоритм заключается последовательной склейке, и затем редукции результата.

Склейка

Сначала элементарные члены совершенной формы записываются в двоичной форме в таблицу, где группируются по количеству единиц.

Затем, члены, которые отличаются одной переменной (одним битом), могут быть склеены. В таком случае единица заменяется на “-”. Очевидно, что склеены могут быть только члены из соседних групп

Члены, которые нельзя склеить, обозначаются звездочкой «*».

Полученные склеенные члены могут, в свою очередь, так же быть склеены. При этом “-” трактуется как “третье” значение.

Когда никакие члены больше не могут быть склеены, из членов, отмеченных “*”, составляется сокращенная форма, которая не обязательно минимальна. После этого производится редукция.

Редукция

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

В ячейках ставится отметка (например, крестик “×”), если соответствующий член сокращенной формы поглощает соответствующий член совершенной формы (т.е. если заголовок строки является частью заголовка столбца).

Выбираются столбцы, содержащие только один “×”. Соответсвтующие им члены сокращенной формы составляют ядро, и должны войти в минимальную форму.

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

Пример

Найдем минимальную форму функции

n x₁ x₂ x₃ x₄ f
0 0 0 0 0 1
1 0 0 0 1 1
2 0 0 1 0 1
3 0 0 1 1 1
4 0 1 0 0 0
5 0 1 0 1 1
6 0 1 1 0 0
7 0 1 1 1 1
8 1 0 0 0 1
9 1 0 0 1 0
10 1 0 1 0 1
11 1 0 1 1 0
12 1 1 0 0 1
13 1 1 0 1 1
14 1 1 1 0 0
15 1 1 1 1 1

Члены СДНФ в двоичной нотации:

  • 0000 = 0
  • 0001 = 1
  • 0010 = 2
  • 0011 = 3
  • 0101 = 5
  • 0111 = 7
  • 1000 = 8
  • 1010 = 10
  • 1100 = 12
  • 1101 = 13
  • 1111 = 15

Группировка:

0

  • 0000 = 0

1

  • 0001 = 1
  • 0010 = 2
  • 1000 = 8

2

  • 0011 = 3
  • 0101 = 5
  • 1010 = 10
  • 1100 = 12

3

  • 0111 = 7
  • 1101 = 13

4

  • 1111 = 15

Склейка 1:

  • 0, 1 = 000-
  • 0, 2 = 00-0
  • 0, 8 = -000
  • 1, 3 = 00-1
  • 1, 5 = 0-01
  • 2, 3 = 001-
  • 2,10 = -010
  • 8,10 = 10-0
  • 8,12 = 1-00
  • 3,7 = 0-11
  • 5,7 = 01-1
  • 5,13 = -101
  • 12,13 = 110-
  • 7,15 = -111
  • 13,15 = 11-1

Группировка 2:

  • 0, 1 = 000-
  • 2, 3 = 001-
  • *12,13 = 110-

  • 0, 2 = 00-0
  • 1, 3 = 00-1
  • 8,10 = 10-0
  • 5,7 = 01-1
  • 13,15 = 11-1

  • 1, 5 = 0-01
  • *8,12 = 1-00
  • 3,7 = 0-11

  • 0, 8 = -000
  • 2,10 = -010
  • 5,13 = -101
  • 7,15 = -111

Склейка 2:

  • *0,1,2,3 = 00–
  • *0,2,8,10 = -0-0
  • *5,7,13,15 = -1-1
  • *1,3,5,7 = 0–1

Итого, члены сокращенной формы:

  • 12,13 = 110-
  • 8,12 = 1-00
  • 0,1,2,3 = 00–
  • 0,2,8,10 = -0-0
  • 5,7,13,15 = -1-1
  • 1,3,5,7 = 0–1

Редукция:

0 1 2 3 5 7 8 10 12 13 15
12,13 × ×
8,12 × ×
0,1,2,3 × × × ×
0,2,8,10 × × ×
5,7,13,15 × × ×
1,3,5,7 × × × ×

Кружком обведены члены ядра.

Ядро, таким образом, включает члены -0-0 и -1-1. Для получения минимальной формы, нам нужно перекрыть дополнительно столбцы 1, 3, 12. Для этого можно взять, например, 0,1,2,3 = 00– и 12,13 = 110-:

[
f =
;overline{x_2};;overline{x_4}; vee
{x_2}{x_4} vee
;overline{x_1};;overline{x_2}; vee
{x_1}{x_2};overline{x_3};
]

Карта Карно:

x₃x₄x₁x₂ 00 01 11 10
00 1 1 1
01 1 1 1
11 1 1 1
10 1 1

Понравилась статья? Поделить с друзьями:
  • Как составить адрес факса
  • Стиральная машина скачет при отжиме как исправить самсунг
  • Рсв код ошибки 0400400013 как исправить
  • Как найти ивана степановича
  • Карточка не открыта не задан номер карточка не попадет в опись ф 0504033 как исправить