Булево упрощение с некоторыми известными комбинациями терминов - PullRequest
2 голосов
/ 25 февраля 2012

Я делаю логическое упрощение, используя Quine-McCluskey , который хорошо работает.

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

Например, я хочу упростить:

(A+B)C

Если я знаю, что:

A+B == true

тогда это упрощается до:

C

Или, если я знаю, что:

BC == false

тогда это упрощается до

AC

Существует ли алгоритм, который может упростить логические выражения с учетом списка известных терминов?

1 Ответ

2 голосов
/ 28 февраля 2012

Я нашел хорошее решение этой проблемы.

Куайн-МакКласки может обработать таблицу истинности, где некоторые термины помечены как "все равно" , что означает, что термин никогда не будет встречаться, поэтому свернутое выражение может возвращать true или false.

Например:

A B result
0 0 0
0 1 don't care
1 0 don't care
1 1 con't care

Хорошо видно, что приведенная выше функция может бытьсводится к минимуму, чтобы просто возвращать «ложь», так как это единственный результат, который нас волнует.

Итак, чтобы разобраться с известными терминами, все, что нужно сделать, это установить для результата значение осторожно " для любых терминов в таблице истинности, где известный термин оценивается как ложный.Затем алгоритм Куайна-МакКласки генерирует минимизированную функцию с учетом известных терминов.

Например, если у нас есть функция от A и B, и мы знаем, что A == false, то любая строка на правде-таблицу, где A истинно, можно пометить как «все равно» , потому что мы знаем, что этого никогда не произойдет.

...