"Информатика (в 2-х частях)", Горячев А.В., Островский С.Л., Паволоцкий А.В., Семёнов А.А., Чернышёва Т.Л., Широков Д.В.
Карта Карно — способ наглядно упростить логическую функцию, не перебирая длинные преобразования выражения. В её клетках размещают значения функции для наборов переменных, а соседние единицы объединяют в группы. Для каждой группы оставляют только переменные, которые в ней не меняются: из них составляют импликанты, а затем соединяют их операцией ИЛИ. Главное — правильно расположить наборы в коде Грея, учитывать соседство краёв и покрыть все единицы.
Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.
Логическая функция — функция, которая принимает значение 0 или 1 в зависимости от значений логических переменных. Её можно задать таблицей истинности, логическим выражением или словесным описанием правила. Таблица показывает результат для каждого возможного набора, поэтому по ней удобно проверять и строить карту.
Карта Карно — таблица, в клетках которой размещены значения функции так, чтобы соседние клетки соответствовали наборам, отличающимся значением только одной переменной. Такое расположение позволяет сразу увидеть, какие наборы можно объединить. Благодаря этому выражение упрощают, не выполняя длинные преобразования.
Соседние клетки карты Карно — клетки, наборы переменных которых различаются ровно одной переменной. Соседями могут быть не только клетки с общей стороной внутри таблицы: крайние клетки строки или столбца тоже соприкасаются. Это правило помогает находить более крупные группы и получать более короткую запись функции.
Импликанта — конъюнкция переменных или их отрицаний, равная 1 на выбранной группе клеток. Для группы оставляют те переменные, значения которых во всех её наборах одинаковы. Каждая такая запись задаёт часть функции, а дизъюнкция импликант покрывает все наборы, на которых функция равна 1.
Начинают с таблицы истинности: каждому её набору переменных должна соответствовать отдельная клетка карты. Значение функции из строки таблицы переносят в эту клетку, поэтому ни один набор нельзя пропустить или записать дважды. Расположение выбирают не произвольно: соседние клетки должны представлять наборы, отличающиеся значением одной переменной, иначе объединение не даст правильного сокращения.
Для двух переменных достаточно квадратной таблицы, а для большего числа переменных карту делят на строки и столбцы, подписанные наборами переменных. Подписи располагают в коде Грея — порядке, в котором соседние коды различаются одним битом. Например, порядок 00, 01, 11, 10 подходит лучше обычного двоичного 00, 01, 10, 11: в нём соседние подписи 01 и 10 отличаются сразу двумя битами. Код Грея сохраняет нужное соседство и при переходе от последней подписи к первой.
Чтобы получить упрощённую дизъюнктивную нормальную форму (ДНФ), на карте объединяют клетки со значением 1. Группа должна быть прямоугольной и содержать 1, 2, 4, 8 и далее клеток, то есть число клеток должно быть степенью двойки. Группы разрешается перекрывать, а также продолжать через край карты: эти правила позволяют захватить больше единиц. Нули в такие группы не включают.
Для каждой группы выясняют, какие переменные не меняют значения. Меняющиеся переменные не влияют на то, где именно внутри группы стоит единица функции, поэтому в импликанте их можно исключить. Неизменная единица записывается как переменная без отрицания, а неизменный ноль — как её отрицание. Чем больше клеток в группе, тем больше переменных обычно меняется и тем короче получается импликанта.
Группы выбирают так, чтобы каждая единичная клетка была покрыта хотя бы один раз. Если единица входит в несколько групп, это допустимо: перекрытие может помочь обойтись меньшим числом слагаемых или использовать более крупную группу. Затем импликанты соединяют операцией ИЛИ и проверяют результат по карте: все единицы должны быть покрыты, а группы не должны захватывать нули. Такая проверка помогает заметить пропущенный набор или неверный знак отрицания.
| Элемент или действие | Что обозначает | Как использовать при упрощении |
|---|---|---|
| Клетка | Место для одного набора значений переменных | Вписать в неё значение функции из таблицы истинности |
| Набор значений переменных | Конкретные значения всех переменных, например 01 | Найти по набору клетку с нужной подписью |
| Значение функции 0 или 1 | Результат функции для данного набора | Объединять единицы при построении ДНФ |
| Соседние клетки | Клетки, наборы которых различаются одним значением переменной | Составлять из них допустимые группы |
| Допустимый размер группы | 1, 2, 4, 8 и далее клеток | Выбирать прямоугольники и проверять их размер |
| Неизменная переменная в группе | Переменная с одинаковым значением во всех клетках группы | Оставлять её в импликанте, при нуле ставить отрицание |
| Переменная, меняющая значение | Переменная, которая принимает и 0, и 1 в группе | Исключать её из импликанты |
Сначала по подписи находят клетку каждого набора и переносят в неё значение функции. Затем отмечают соседние единицы и проверяют, можно ли объединить их в группы допустимого размера. При чтении группы оставляют только неизменные переменные, а результат проверяют по всем единичным клеткам.
Задача 1. Для функции двух переменных задана таблица истинности: значение 1 функция принимает только при x = 0 и y = 1. Постройте карту Карно и запишите функцию.
Ответ: f(x, y) = ¬x ∧ y. Запись равна 1 только при x = 0 и y = 1, как и требуется в условии.
Задача 2. Для функции трёх переменных единицы стоят в наборах 001, 011, 101 и 111. Постройте карту Карно и упростите функцию.
Ответ: f(x, y, z) = z. Проверка простая: функция равна 1 ровно на наборах, где z = 1, независимо от x и y.
Задача 3. Для функции четырёх переменных единицы заданы наборами 0000, 0001, 0011, 0010, 1100, 1101, 1111 и 1110. Постройте карту Карно, найдите минимальную ДНФ и проверьте результат по таблице истинности.
Ответ: f(x, y, z, w) = (¬x ∧ ¬y) ∨ (x ∧ y). Проверка по таблице подтверждает: все заданные наборы с xy = 00 или 11 дают 1, а наборы с xy = 01 или 10 дают 0.
Располагают наборы в обычном двоичном порядке и считают соседними клетки рядом на бумаге. Тогда некоторые соседние подписи отличаются сразу двумя битами, и сокращение получается неверным. Ошибка возникает из-за привычного порядка двоичных чисел; проверьте каждую пару соседних подписей: различаться должен ровно один бит.
Считают соседними только клетки, имеющие общую сторону внутри таблицы, и не замечают соседство через края. Из-за этого единицы могут остаться в маленьких группах, хотя их можно объединить крупнее. Представьте карту свёрнутой в кольцо и проверьте, не соединяются ли противоположные края строки или столбца.
Объединяют клетки по диагонали либо берут группу из трёх, шести или другого неподходящего числа клеток. Такие группы не соответствуют допустимому объединению наборов, потому что их размер не является степенью двойки или клетки не образуют прямоугольник. Перед записью импликанты проверьте форму группы, её размер и соседство клеток.
Оставляют в импликанте переменную, которая меняется внутри группы, или неверно ставят отрицание. Первое делает выражение излишне сложным, второе может поменять значение функции. Сверьте значения каждой переменной во всех клетках группы: меняющуюся исключите, постоянный ноль запишите с отрицанием, постоянную единицу — без него.
Для работы с картой Карно нужно уметь читать таблицу истинности, записывать логические выражения и применять операции НЕ, И и ИЛИ. Например, переменная с нулевым значением в группе записывается через НЕ, а переменные одной импликанты соединяются через И.
Карты Карно используют для минимизации булевых функций — поиска более коротких логических выражений. Такие выражения применяют при проектировании логических схем и цифровых устройств: меньшее число операций обычно означает более простую схему. Поэтому метод связывает школьную алгебру логики с практическим устройством компьютеров и электроники.
Зачем на карте Карно используют порядок Грея?
В коде Грея соседние подписи отличаются ровно одним битом, то есть значением одной переменной. Поэтому соседние клетки карты можно объединять без ошибки в упрощении.
Можно ли объединять клетки через край карты?
Да. Противоположные края карты считаются соприкасающимися, поэтому клетки у края могут быть соседями. Такое объединение допустимо, если клетки образуют группу размера, равного степени двойки.
Какого размера могут быть группы клеток?
Группа может содержать 1, 2, 4, 8 и далее клеток — число должно быть степенью двойки. Клетки группы образуют прямоугольник с учётом соседства через края.
Что делать, если одну единичную клетку можно включить в несколько групп?
Можно включать её в разные группы, если это помогает покрыть все единицы более крупными группами или уменьшить число слагаемых. При этом каждая единичная клетка должна оказаться хотя бы в одной группе.
Как определить, какие переменные оставить в импликанте?
Сравните значения каждой переменной во всех клетках группы. Оставьте только те, которые не меняются: постоянная единица записывается без отрицания, постоянный ноль — с отрицанием.
§ 6. Способ упрощения логической функции с помощью карт Карно