Как составить карту карно по функции

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

Время на прочтение
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).

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

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

Расположение термов в карте Карно для функции 4 переменных, изображённой на плоскости и на поверхности тора. Изображение на поверхности тора наглядно показывает соседство первой и последней строк таблицы и крайнего правого и крайнего левого столбцов. Отмеченные точками клетки являются соседними.

Ка́рта Ка́рно (куб Ка́рно, диагра́мма Ка́рно, ка́рта Ве́йча) — графический способ представления булевых функций с целью их удобной и наглядной ручной минимизации[1].

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

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

Карты Карно можно рассматривать как развертку на плоскость n-мерного булева куба, причем размерность этого гиперкуба совпадает с количеством переменных представляемой функции, а каждая вершина гиперкуба взаимно однозначно соответствует одной клетке карты Карно. Графически карта Карно изображается в виде прямоугольника или квадрата из ячеек, число которых равно 2^{n}, причем любые две соседние ячейки по вертикали или горизонтали или, иными словами — в окрестности фон Неймана описывают термы, различающиеся только по одной переменной — с логическим отрицанием и без логического отрицания. Также соседним являются первая и последняя строки, крайний левый и крайний правый столбцы таблицы, поэтому таблица Карно является фактически разверткой логического гиперкуба на поверхность тороида. Возможно построение самых различных карт для одной и той же функции, удовлетворяющих условию: геометрическое соседство ячеек в смысле фон Неймана — логическое соседство термов — то есть с расстоянием Хэмминга между термами соседних ячеек равным 1. Любая из таких таблиц одинаково удобна для минимизации функции, но обычно переменные по строкам и столбцам в карте Карно упорядочивают по рефлексивному коду Грея из-за мнемоничности и наглядности.

История[править | править код]

Карты Карно были предложены в 1952 году Эдвардом В. Вейчем[2] и усовершенствованы в 1953 году физиком из «Bell Labs» Морисом Карно (Maurice Karnaugh), чтобы упростить проектирование цифровых систем[3].

Основные принципы[править | править код]

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

Рядом расположенные группы единиц или нулей на карте Карно объединяют в прямоугольные области или «склейки» размером {displaystyle 2^{a}times 2^{b}} клеток. Каждая такая группа в итоговой логической формуле будет соответствовать одному терму (если считать, что операция логического «ИЛИ» — это «суммирование», а операция логического «И» — это «перемножение», то один терм соответствует одному слагаемому в случае ДНФ, или одному сомножителю в случае КНФ), содержащему {displaystyle n-a-b} переменных, это группирование обычно называют «склейкой»[4]. Таким образом, работа с картой сводится к выделению оптимального набора нескольких групп единиц (нулей) и преобразование их в логическое выражение.

Принципы минимизации[править | править код]

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

{overline {X}}_{1}X_{2}X_{3}X_{4}vee {overline {X}}_{1}X_{2}{overline {X}}_{3}X_{4}={overline {X}}_{1}X_{2}X_{4}(X_{3}vee {overline {X}}_{3})={overline {X}}_{1}X_{2}X_{4}cdot 1={overline {X}}_{1}X_{2}X_{4}.

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

({overline {X}}_{1}vee X_{2}vee X_{3}vee X_{4})({overline {X}}_{1}vee X_{2}vee {overline {X}}_{3}vee X_{4})={overline {X}}_{1}vee X_{2}vee X_{4}vee X_{3}{overline {X}}_{3}={overline {X}}_{1}vee X_{2}vee X_{4}vee 0={overline {X}}_{1}vee X_{2}vee X_{4}.

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

Avee {overline {A}}=1;A{overline {A}}=0.

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

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

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

Karnaugh map 01 fixed.gif

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

Karnaugh map 02.gif

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

{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_{1}X_{3})={overline {X}}_{2}({overline {X}}_{1}vee X_{1})({overline {X}}_{3}vee X_{3})={overline {X}}_{2}

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

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

Karnaugh map 03.gif

Аналогичным образом можно работать с логическими функциями большего числа переменных.

Стили представления карт Карно[править | править код]

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

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

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

а) Karnaugh Style 1.png
б) Karnaugh Style 2.png
в) Karnaugh Style 3.png
г) Karnaugh Style 4.png

Порядок работы с картой Карно[править | править код]

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

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

Рис. 2. Пример работы с картой Карно

Принципы склейки[править | править код]

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

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

a) Карта Карно — склейка по единицам.png
б) Карта Карно — склейка по нулям.png

  • Склеивать можно только прямоугольные области с числом единиц (нулей), являющимся целой степенью двойки (1, 2, 4, 8, 16, 32… клетки).

Карта Карно — правильные размеры областей.png
Карта Карно — неправильный выбор размера области.png

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

Карта Карно — неоптимальный выбор областей склейки.png

  • В некоторых ситуациях в раскладке образуется изолированная единица или ноль, которую невозможно включить в какую-либо область. В этом случае единица (ноль) склеивается «сама с собой». Нельзя оставлять «висячие» единицы (нули), так как это приведёт к некорректной записи выражения для функции.
  • Все единицы (нули) должны попасть в какую-либо область.

Карта Карно — что делать с висячей единицей.png

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

Карта Карно — однородность области склейки.png

  • Для карт Карно с числом переменных 3 и 4 применимо следующее правило: крайние клетки каждой горизонтали и каждой вертикали граничат между собой и могут объединяться в прямоугольники (топологически карта Карно представляет собой тор). Следствием этого правила является смежность всех четырёх угловых ячеек карты Карно для 4 переменных. Для карт Карно с числом переменных менее 3 это правило не имеет смысла, так как крайние клетки и так граничат между собой; для карт Карно с числом переменных более четырёх правила смежности более сложные.

Карта Карно — объединение граничных клеток.png

  • Одна ячейка карты Карно может входить сразу в несколько областей. Это следует из очевидного свойства булевых функций: повторение уже существующего слагаемого (сомножителя) не влияет на функцию: Avee A=A;Acdot A=A.

Карта Карно — одна клетка может входить в несколько склеек.png

  • Не следует без нужды включать клетку во все возможные склейки, это не является ошибкой, но усложняет формулу. С точки зрения минимальности ДНФ (КНФ) число склеек должно быть как можно меньше (каждая дополнительная склейка порождает дополнительный терм), а число клеток в склейке должно быть максимально возможным (чем больше клеток в склейке, тем меньше переменных содержит терм. Склейка размером 2k клеток порождает терм с nk переменными)[4].

Карта Карно — не следует без нужды включать клетку во множество склеек.png

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

Карта Карно — различные покрытия одной карты.png

Карты с неопределёнными значениями[править | править код]

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

На рисунке показано цифровое устройство F с четырьмя двоичными входными сигналами {displaystyle x_{1}...x_{4}}. Входными сигналами могут быть показания датчиков, работающих на замыкание и следовательно имеющих только два значения — «включено» (1) и «выключено» (0). Предположим, что в силу особенностей конструкции устройства 2-й и 4-й датчики не могут сработать одновременно, то есть сочетание сигналов {displaystyle x_{2}x_{4}=11} физически невозможно. В этом случае значение функции в четырёх клетках карты Карно не имеет значения, что условно показано символом «×».

Такие клетки могут произвольным образом включаться в любые склейки, а также могут не включаться ни в какие склейки, то есть их по желанию можно доопределять и как 1, и как 0[5].

Карта Карно — неопределённые значения в некоторых клетках.png

Преобразование карты в формулу[править | править код]

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

  • Каждая склейка на карте Карно является слагаемым ДНФ при склеивании по единицам и сомножителем КНФ при склеивании по нулям.
  • Если склейка охватывает 2k клеток, то ей будет соответствовать слагаемое из n–k сомножителей в ДНФ и сомножитель с n-k слагаемыми в КНФ. Например, при минимизации функции 4 переменных склейка из 4 единиц будет соответствовать слагаемому из двух сомножителей.
  • В карте Карно для каждой переменной существуют две зоны, каждая из которых занимает ровно половину клеток карты. В одной зоне переменная присутствует в прямом виде, в другой — в инверсном. Если склейка целиком лежит в одной из этих зон, соответствующая переменная присутствует в слагаемом (сомножителе). Если склейка лежит одновременно в двух зонах, то данная переменная испытывает поглощение и не присутствует в слагаемом (сомножителе).

Преобразование карты Карно в ДНФ.pngПреобразование карты Карно в КНФ.png

Описание[править | править код]

Карта Карно может быть построена для любого количества переменных, однако удобно работать при количестве переменных не более пяти. По сути Карта Карно — это таблица истинности, представленная в виде матрицы в 2-мерном виде.

Каждая клетка этой карты соответствует одной строке в классической таблице истинности и обозначается строкой переменных с инверсиями и без инверсий. Например, пусть в таблице истинности для функции 4 переменных {displaystyle x_{1},x_{2},x_{3},x_{4},} одна из строк имеет вид: 0 1 1 0 | 1, тогда клетка в карте Карно, соответствующая этой строке, будет иметь имя {displaystyle {overline {x}}_{1},x_{2},x_{3},{overline {x}}_{4}} и в этой клетке ставится 1. Указание имён клеток в карте Карно обычно выполняется дополнительной строкой сверху и дополнительным столбцом слева.

Существенно, что в карте Карно соседние клетки обязательно имеют соседние, в смысле расстояния Хэмминга коды, то есть расстояние Хэмминга между соседними клетками равно 1, и различаются только состоянием — с инверсией или без, одной и только одной из переменных. Соседними клетками считаются клетки, примыкающие друг к другу стороной, также соседними клетками считаются клетки крайнего левого и крайнего правого столбцов и клетки первой и последней строк. Таком образом, карта Карно на плоскости топологически эквивалентна поверхности тора в трёхмерном пространстве, или гипертору в пространстве с размерностью на 1 больше размерности соответствующей многомерной карты Карно.

Так как перестановка переменных в логической функции не изменяет саму функцию, то есть, например, {displaystyle F(x_{1},x_{2},x_{3},x_{4})=F(x_{4},x_{2},x_{3},x_{1})} или, что то же самое, — перестановка столбцов переменных в таблице истинности не изменяет функцию, существует несколько вариантов отображения таблицы истинности на карту Карно с сохранением «соседства» клеток. Но практически наиболее часто карту Карно заполняют, используя нарастающий код Грея для обозначения строк и столбцов. Такой подход гарантирует порождение карты Карно с избеганием субъективных ошибок.

При заполнении карты на пересечении строки и столбца проставляется соответствующее значение из таблицы истинности — 0 или 1. После того как карта заполнена, приступают к минимизации.

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

  1. Объединяем смежные клетки, содержащие единицы, в область так, чтобы одна область содержала 2^{n} (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 {X_{1}}} {overline {X_{2}}} {overline {X_{1}}} X_{2} X_{1} X_{2} X_{1} {overline {X_{2}}} {overline {X_{2}}} {overline {X_{1}}} {X_{2}} {X_{1}}
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
S_{1}vee S_{2}= S_{1}vee S_{2}= S_{1}vee S_{2}= S_{1}vee S_{2}= S_{1}vee S_{2}= S_{1}vee S_{2}=
=X_{1}X_{2}vee =X_{1}{overline {X_{2}}}vee =X_{2}vee X_{1} =X_{1}vee {overline {X_{2}}} ={overline {X_{1}}}vee {overline {X_{2}}} =X_{2}vee {overline {X_{1}}}
vee {overline {X_{1}}} {overline {X_{2}}} vee {overline {X_{1}}}X_{2}

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

{displaystyle f(X_{1},X_{2},X_{3},X_{4})=S_{1}vee S_{2}vee S_{3}={overline {X_{1}}} {overline {X_{4}}}vee X_{1} X_{2} X_{4}vee {overline {X_{4}}}{overline {X_{2}}}.}

В формате КНФ:

{displaystyle f(X_{1},X_{2},X_{3},X_{4})=S_{1}S_{2}S_{3}=(X_{1}vee {overline {X_{4}}})(X_{2}vee {overline {X_{4}}})({overline {X_{1}}}vee {overline {X_{2}}}vee X_{4}).}

Так же из ДНФ в КНФ и обратно можно перейти, использовав Законы де Моргана.

Примеры[править | править код]

Пример 1[править | править код]

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

Для краткости обозначим родственников Коли через буквы:
мама — X1
папа — X2
дедушка — X3
бабушка — X4

Условимся обозначать согласие родственников единицей, несогласие — нулём. Возможность пойти погулять обозначим буквой f, Коля идёт гулять — f = 1, Коля гулять не идёт — f = 0.
Составим таблицу истинности:

Nikolay true table.png

Перерисуем таблицу истинности в 2-мерный вид:

2d true table.png

Переставим в ней строки и столбцы в соответствии с кодом Грея (последний и предпоследний столбец меняют местами). Получили Карту Карно:

Karnough map 4 empty.png

Заполним её значениями из таблицы истинности (первая строка не соответствует таблице истинности, так как f=0 и разрешения на гулять нет):

Nikolay map.png

Минимизируем в соответствии с правилами:

Nikolay map DNF.png

  1. Все области содержат 2^n клеток;
  2. Так как Карта Карно на четыре переменные, оси располагаются на границах Карты и их не видно (подробнее смотри пример Карты на 5 переменных);
  3. Так как Карта Карно на четыре переменные, все области симметрично осей — смежные между собой (подробнее смотри пример Карты на 5 переменных);
  4. Области S3, S4, S5, S6 максимально большие;
  5. Все области пересекаются (необязательное условие);
  6. В данном случае рациональный вариант только один.

f(X1,X2,X3,X4)=S1vee S2vee S3vee S4vee S5vee S6=

=X3X4 vee  X1X2 vee  X2X4 vee  X1X4 vee  X1X3 vee  X2X3

Теперь по полученной минимальной ДНФ можно построить логическую схему:

Logic Nikolay.PNG

Из-за отсутствия в наличии шестивходового элемента ИЛИ, реализующего функцию дизъюнкции, пришлось каскадировать пяти- и двух-входовые элементы (D7, D8).

Составим мин. КНФ:

Nikolay map KNF.png

f(X1,X2,X3,X4)=(S1) (S2) (S3) (S4)=

=(X1vee X2vee X3)(X1vee X3vee X4)(X2vee X3vee X4)(X1vee X2vee X4)

~logic Nikolay.PNG

См. также[править | править код]

  • ДНФ
  • КНФ
  • СДНФ
  • СКНФ
  • Минимизация логических функций методом Куайна
  • Минимизация комбинационных схем
  • en:Espresso heuristic logic minimizer
  • Метод Куайна — Мак-Класки

Примечания[править | править код]

  1. Гивоне Д. Россер Р. (1983), с. 67—76.
  2. Veitch E. W. (May 1952).
  3. Karnaugh M. (November 1953).
  4. 1 2 Гивоне Д. Россер Р. (1983), с. 69.
  5. 1 2 Гивоне Д. Россер Р. (1983), с. 75.

Источники[править | править код]

  • Veitch E.W. (May 1952) A Chart Method for Simplifying Truth Functions. Proceedings, Association for Computing Machinery, Pittsburgh, Pa., May 2, 3, 1952, pp. 127—133. DOI:10.1145/609784.609801.
  • Karnaugh M. (November 1953) The Map Method for Synthesis of Combinational Logic Circuits. Transactions of the American Institute of Electrical Engineers, Part I: Communication and Electronics. 72 (5): 593—599. DOI:10.1109/TCE.1953.6371932.
  • Токхейм Р. Основы цифровой электроники: Пер. с англ. — М.: Мир, 1988. — 392 с.. ил. (Глава 4, страницы 88—95)
  • Гивоне Д. Россер Р. Микропроцессоры и микрокомпьютеры: Вводный курс: Пер. с англ. — М.: Мир, 1983.— 464 с., ил.

Ссылки[править | править код]

  • Using Karnaugh maps in practical applications, Разработка схемы управления светофором.

Программное обеспечение

  • Karnaugh Minimizer, Коммерческое Windows-приложение (часто работает некорректно, например для этого уравнения: 0,1,5,8,10,13).
  • Logic Minimizer, Коммерческое Windows-приложение, но можно сделать, чтобы запускалось на Unix.
  • Kmap minimizer Онлайн-приложение (Flash).
  • GKMap, свободное ПО на SourceForge.net.
  • Karnaugh Map Minimizer, бесплатное (но часто некорректно работающее) ПО на SourceForge.net.
  • Gorgeous Karnaugh, коммерческое ПО Gorgeous Karnaugh для минимизации по картам Карно.

Видео[править | править код]

  • Карты Карно. Лекция. Youtube.

Занятие 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)

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

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

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

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

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

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

[
;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

Добавить комментарий