Анализ данных  • 15 мая 2024 • 5 мин чтения

Булевы функции и их построение

Булевы функции выполняют логические операции над значениями истинности — true и false. Этот раздел математики помогает программистам описывать логику алгоритмов.

Понятие булевой функции

Булевы функции — это математический способ описания логических операций. Названы по имени британского математика Джорджа Буля, который в середине XIX века создал науку математической логики — булеву алгебру. Если обычные математические операции проводят с действительными числами, то булева алгебра работает со значениями истинности: true — «правда» и false — «ложь». В двоичной системе счисления, которая используется в программировании, их обозначают цифрами 1 и 0.

Простой пример функции булевых переменных: представим программу умного дома, которая управляет освещением. Чтобы понимать, в каком состоянии находится выключатель, программа использует логические значения. Если свет включён, значение состояния выключателя в программе будет равно 1, или true. Если выключен — 0, или false. Получение ответа «правда» или «ложь» по условию «Включён ли свет?» и есть простейшая булева функция.

У булевых функций есть входы — операнды и выход — результат. Например, выключатели света есть в двух комнатах и в прихожей. Чтобы лампа в прихожей выключалась, когда в обеих комнатах свет выключен, программе умного дома нужно применить булеву функцию AND — И. Эта функция берёт значения с выключателей в комнатах — входы: если оба они выключены (false и false), на выходе тоже будет значение false, и тогда свет в прихожей также выключится.

Какие булевы функции часто используют в программировании:

AND — И, конъюнкция. Возвращает true, если оба выхода равны true.

OR — ИЛИ, дизъюнкция. Возвращает true, если хотя бы один из выходов равен true.

NOT — НЕ, отрицание, инверсия. Инвертирует значение входа: если вход был true, возвращает false, и наоборот.

ID — тождественность. Возвращает входное значение без изменений. True остаётся true, а false — false.

XOR — исключающее ИЛИ. Возвращает true, если только один из выходов был true.

IF, THEN — «если…, то…», импликация. Определяет отношения между посылкой и следствием. Возвращает следствие true, если посылка true. Если посылка имеет значение false, то следствие может быть и false, и true.

NAND — И-НЕ. Инвертирует результат функции AND, то есть возвращает false, только если оба входа равны true.

NOR — ИЛИ-НЕ. Инвертирует результат функции OR, то есть возвращает true, только если оба входа равны false.

XNOR — исключающее ИЛИ-НЕ. Возвращает true, если оба входа одинаковы, то есть оба равны true или оба равны false.

Разбираться в булевых функциях учат на курсе для аналитиков. Студенты изучают линейную алгебру, математический анализ, теорию вероятности, статистику и т. д. Подойдёт тем, кто хочет развиваться в Data Science.

Изучите математику для анализа данных за 6 месяцев
Погрузитесь в линейную алгебру, матанализ и теорию вероятностей, научитесь применять статистические тесты, решите 1000+ практических задач.

Таблицы истинности булевых функций

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

1. AND — И, конъюнкция. Возвращает true, если оба выхода равны true. В строках таблицы указывают все возможные комбинации значений входов A и B. В третьем столбце указан результат этих комбинаций с булевой функцией AND, которую также называют конъюнкцией или логическим умножением. Логическое умножение входов A и B обозначают символом ∧.

Из таблицы истинности функции AND видно, что выход 1(true) возможен, только когда оба выхода тоже имеют значение 1 (true). Если хотя бы один вход имеет значение 0 (false), на выходе тоже будет 0 (false).

A
B
AB
0
0
0
0
1
0
1
0
0
1
1
1

2. OR — ИЛИ, дизъюнкция. Возвращает true, если хотя бы один из выходов равен true. Функцию OR в булевой алгебре также называют дизъюнкцией или логическим сложением. Логическое сложение входов A и B обозначают символом ∨.

Выход функции OR имеет значение 1, если хотя бы один из выходов имеет значение 1. Когда значения входа A и входа B равны 0, результат логического сложения тоже будет равен 0.

A
B
AB
0
0
0
0
1
1
1
0
1
1
1
1

3. NOT — НЕ, отрицание, инверсия. Инвертирует значение входа: если вход был true, возвращает false, и наоборот. У булевой функции NOT — она же отрицание, или инверсия, — всего один вход, значение которого функция меняет на противоположное.

A
¬A
0
1
1
0

Суперпозиции функций

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

Допустим, задана булева функция (A AND B) OR (C AND D). В этой операции есть четыре входа: A, B, С и D. Как и в обычной математике, сначала нужно выполнить операции AND в скобках, получить новые выходы и затем провести с ними операцию OR.

Таблица истинности для функции (A AND B) OR (C AND D):

Результат суперпозиции — применение функции OR к входам, получившимся в операциях AND над парами входов A, B и С, D.

Двойственные функции

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

● OR — ИЛИ и AND — И;
● XOR — исключающее ИЛИ и XNOR — исключающее ИЛИ-НЕ;
● NOT — НЕ и ID — тождественность;
● NAND — И-НЕ и NOR — ИЛИ-НЕ.

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

Разложение функции по переменным

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

Метод графических карт Карно. Подход основан на преобразовании таблиц истинности булевых функций. Ячейки таблицы нужно поделить на прямоугольники, чтобы объединить соседние единицы. Значения в получившихся прямоугольниках — переменные упрощённого логического выражения функции.

Разложение Шеннона. Суть метода в разделении таблицы истинности на две части: в одной должны остаться входы, при которых переменная принимает значение 1, в другой — при которых 0. В результате булева функция принимает вид суммы двух подфункций.

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

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

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

Статью подготовили:
Сергей Галкин
Яндекс Практикум
Редактор
Анастасия Павлова
Яндекс Практикум
Иллюстратор

Дайджест блога: ежемесячная подборка лучших статей от редакции

Поделиться
Бесплатный вебинар 30 июля: как найти работу после онлайн-курсов
Wed Jul 24 2024 14:07:50 GMT+0300 (Moscow Standard Time)