Что такое минимизация булевых функций в булевой алгебре? Объясните на примере

Минимизация булевых функций — это преобразование логического выражения к более простому виду, который вычисляет ту же функцию, но содержит меньше операций, переменных или…

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

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

Что такое булева функция

Булева функция принимает на вход логические значения и возвращает логическое значение.

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

F(A, B) = A И B

Зачем минимизировать

Минимизация позволяет:

Основные законы

Для упрощения используют законы булевой алгебры:

Пример минимизации

Пусть дана функция:

F = (A И B) ИЛИ (A И НЕ B)

Вынесем A за скобки:

F = A И (B ИЛИ НЕ B)

Выражение B ИЛИ НЕ B всегда истинно:

B ИЛИ НЕ B = 1

Тогда:

F = A И 1 = A

Значит, исходное выражение можно заменить просто на A.

Проверка таблицей истинности

ABA И BA И НЕ BFA
000000
010000
100111
111011

Столбцы F и A совпадают, значит минимизация корректна.

Методы минимизации

В учебной практике часто используют:

Пример в программировании

Сложное условие:

if ((isAdmin && hasToken) || (isAdmin && !hasToken)) {
  console.log("Доступ к панели");
}
if ((isAdmin && hasToken) || (isAdmin && !hasToken)) {
  console.log("Доступ к панели");
}
package main
import "fmt"
func main() {
  if (isAdmin && hasToken) || (isAdmin && !hasToken) {
    fmt.Println("Доступ к панели")
  }
}
public class Example {
  public static void main(String[] args) {
    if ((isAdmin && hasToken) || (isAdmin && !hasToken)) {
      System.out.println("Доступ к панели");
    }
  }
}
if (isAdmin and hasToken) or (isAdmin and not hasToken):
  print("Доступ к панели")

Минимизированная форма:

if (isAdmin) {
  console.log("Доступ к панели");
}
if (isAdmin) {
  console.log("Доступ к панели");
}
package main
import "fmt"
func main() {
  if isAdmin {
    fmt.Println("Доступ к панели")
  }
}
public class Example {
  public static void main(String[] args) {
    if (isAdmin) {
      System.out.println("Доступ к панели");
    }
  }
}
if isAdmin:
  print("Доступ к панели")

Вывод

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

Источники

  • Семакин И.Г. Основы программирования и баз данных. Учебник. - М.: Академия, 2014. - 224 с.
  • Симонова Е.В. Структуры данных в C#. Линейные и нелинейные динамические структуры. - Лань, 2018. - 152 с.
  • Бертран Мейер. Почувствуй класс. Учимся программировать хорошо с объектами и контрактами. - М.: Национальный Открытый Университет "ИНТУИТ": БИНОМ. Лаборатория знаний, 2011. - 775 с.
  • Мэтт Вайсфельд. Объектно-ориентированное мышление. - СПб.: Питер, 2014. - 304 с.
  • Ривест Р., Штайн К., Лейзерсон Ч., Кормен Т. Алгоритмы: построение и анализ. - М.: Вильямс, 2007. - 1296 с.
  • Стивенс Род. Алгоритмы. Теория и практическое применение. - М.: Эксмо, 2017. - 544 с.
  • Рублев В.С. Основы теории алгоритмов. - 2-е издание, исправленное. - М.: Научный мир, 2008. - 128 с.
  • Гольдберг Г.Л. Основы алгоритмизации и программирования. - М.: Академия, 2012. - 384 с.
  • Лаврищева И.В. Технология программирования. - М.: Горячая линия - Телеком, 2011. - 400 с.
  • Сергеев И.С., Сухоруков А.И., Шестаков А.А. Программирование: учебник для вузов. - М.: БИНОМ. Лаборатория знаний, 2013. - 512 с.