Упроститель логической функции?

x = (a & b & d) | ~(a | ~b | c) | (~c & ~d & a) | (c & d)

~ = not
& = and
| = or

Как мне упростить такую ​​функцию, с чего мне начать? Я пробовал несколько упрощающих программ, но я их не понимаю.


person Bernard James    schedule 02.05.2016    source источник
comment
Это домашнее задание или вы пытаетесь решить проблему из реального мира?   -  person DarkDust    schedule 03.05.2016
comment
я пытаюсь спасти мир хорошо   -  person Bernard James    schedule 03.05.2016
comment
Напишите таблицу истинности и относитесь к ней как к карте Карно.   -  person Paul R    schedule 03.05.2016
comment
хорошо, я сделал это 2 года назад, попробую, но есть ли способ проверить, правильно ли я сделал? любые программы   -  person Bernard James    schedule 03.05.2016
comment
Logic Friday хорош для такого рода вещей, если вы знаете, что делаете (предостережение: только для Windows) .   -  person Paul R    schedule 03.05.2016
comment
плохо вы, ребята, ставите мне минусы в посте, я просто хочу помощи, так грубо   -  person Bernard James    schedule 03.05.2016
comment
Wolfram Alpha хорошо подходит для получения различных вариантов, которые возможно, но на самом деле не объясняет, как он попал из а в б.   -  person 500 - Internal Server Error    schedule 03.05.2016
comment
да, я использую вольфрам альфа много для других вещей, но я не понимаю, что он мне выводит, я не знаю, какая из упрощенных форм мне нужна   -  person Bernard James    schedule 03.05.2016
comment
Я считаю, что ваш вопрос совершенно законен и был мне понятен.   -  person Tom Mozdzen    schedule 19.07.2020
comment
См. Упростить алгоритм логического выражения   -  person ggorlen    schedule 21.10.2020


Ответы (2)


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

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

Скажем, только 3 строки имеют выход «истина» или «логическая единица». Это означало бы, что у вас будет три логических уравнения. Вы завершите работу, соединив эти три уравнения вместе с операторами ИЛИ.

Посмотрев на таблицу истинности, вы могли бы заметить, что вывод логических истинных строк не зависит от всех переменных. Это один из способов упростить выражение.

Решение уравнения, аналогичного приведенному выше (a & b & d) | (~ a | b | ~ c) | (~ c & ~ d & a) | (CD)

Я получаю следующий результат

x = 1, за исключением одного случая, т.е. (a b c d) = (1 0 1 0), и в этом случае он равен нулю. Таким образом, x = ~ (a & ~ b & c & ~ d) или x = ~ a | б | ~ c | d

Как это сделать? Чтобы упростить это, вы можете переписать уравнение как

 x = A | B | C | D, where

 A =  (a &  b & d)
 B = (~a | b | ~c)
 C =  ~c & ~d & a
 D =   c &  d

переменная B = 1 для всех, кроме двух наборов входных данных (abcd), а именно (1010) и (1011).

переменная A = 1 только для двух входных наборов, которые B уже охватывает.

аналогично с переменной C.

Переменная D = 1 для одного из двух наборов входов B не составляла = 1, а именно (1011).

Таким образом, x = 0 только тогда, когда входные данные равны a = 1, b = 0, c = 1, d = 0, но мы хотим записать его как уравнение, которое является истинным (= 1), когда эти входные данные заданы, поэтому мы записывать

 x = ~(a & ~b & c & ~d) or x = ~a | b | ~c | d

Так что это один из способов упрощения. Я добавлю вторую технику в отдельный ответ.

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

Исходное уравнение ОП довольно упрощено как есть. Таблица истинности имеет почти равные записи T и F и поэтому не подходит для демонстрации техники. Его можно было переписать как

 x = (a & b & d) | (~a & b & ~c) | (a & ~c & ~d) | (c & d)

который довольно компактен, но может быть записан немного иначе, сочетая 1-й и последний члены и два средних члена: x = ((a & b | c) & d) | ((~ a & b | a & ~ d) & ~ c) см. 2-й предложенный ответ ниже для дальнейшего объяснения

person Tom Mozdzen    schedule 02.05.2016
comment
Я нашел несколько старых заметок, сделаю что-нибудь в этом роде, спасибо, горячая, бой - person Bernard James; 03.05.2016
comment
Вопрос несколько расплывчатый. Вы также можете минимизировать эту функцию, используя алгоритм Куайна-Маккласки или упростите функцию, переписав ее в нормальной форме, такой как конъюнктивная нормальная форма. - person Anderson Green; 13.08.2019

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

например, ваш первый и последний термины можно записать:

а & b & d + c & d

вы можете написать это как (a & b + c) & d

Иногда это помогает

скажем, у вас есть термины E и F, и их следует складывать вместе, а не объединять.

E= (~a | b | ~c)

F = ~ c & ~ d & a

Вы бы написали E & F =

(~ a + b + ~ c) & (~ c & ~ d & a)

а затем вы можете расширить это до:

= ~ a & (~ c & ~ d & a) + b & (~ c & ~ d & a) + ~ c & (~ c & ~ d & a)

поскольку ~ a & a всегда = 0, а ~ c & ~ c всегда = 1

E & F = b & ~ c & ~ d & a + ~ d & a

  = a & b & ~c & ~d + a & ~d

но это можно упростить дальше

E & F = (a & ~ d) & (b & ~ c + 1), но b & ~ c + 1 всегда = 1, поэтому

E & F = a & ~ d

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

и помните ~ (a + b) = ~ a & ~ b, который я забыл, и поэтому мне пришлось использовать немного другой пример, чем тот, что опубликован выше

person Tom Mozdzen    schedule 19.07.2020
comment
изначально была ошибка с ~ (a + ~ b + c) до ~ a & b & ~ c, поэтому я изменил термин, с которым работал, на (~ a + b + ~ c) - person Tom Mozdzen; 19.07.2020