Эффективные способы представления логического выражения

Я пишу консольную программу для представления логических выражений (что-то нравится AB'C + A'C) чтобы можно было упростить (оптимизировать) выражения и оценить их значения. Я пытался использовать string чтобы представить выражение, но таким образом, я могу только оценить его значение на основе входных значений, но оптимизировать выражение, представленное в виде строки, очень сложно (со мной), Пример, ABC + AB может быть AB так как ABC+AB знак равно AB(C+1) знак равно AB, Я также думаю, что другой способ использования vector of vector of literal, Пример, AB'C + AB + BC будет представлен как на рисунке ниже:

Объяснение: каждый столбец представляет для каждого термина, в приведенном выше примере. Первый столбец представляет для AB'C второй представляет для AB а третий представляет для BC', Я думаю, что это хороший способ представить логическое выражение, но я все еще не могу найти способ оптимизировать выражение, подавляющее этим способом. Я также погуглил, но я не нашел пример проекта для проблемы.

Короче говоря, я надеюсь, что кто-то предложит мне способ более легкого представления, оценки и оптимизации логического выражения. Заранее спасибо!

1 ответ

Как представить, оценить и оптимизировать логическое выражение?

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

Чтобы упростить дерево, вы используете законы булевой алгебры.

Если все значения связаны, то в процессе упрощения дерево будет упрощено до корневого узла с true или же false,

Для некоторого примера кода я проверил Rosetta Code, но у них не было задачи для оценки булевых выражений. Ближайшая задача - арифметическая оценка.

Другие вопросы по тегам