Эффективные способы представления логического выражения - PullRequest
0 голосов
/ 15 декабря 2018

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

enter image description here

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

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

1 Ответ

0 голосов
/ 16 декабря 2018

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

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

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

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

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

...