Как представить CNF (a ∨ ¬b ∨ c) ∧ (¬a ∨ d) в виде списка или строки в JAVA - PullRequest
3 голосов
/ 06 ноября 2011

Например, (a ∨ ¬b ∨ c) ∧ (¬a ∨ d) до "(a !b c) (!a d)" или ((a (not b) c) ((not a) d))

Я не могу дать ясного ответа на мой вопрос.(a (не b) c) ((не a) d)) вместо (a ||! b || c) && (! a || d)

Извините за ошибку ..

Надеюсь, кто-нибудь может дать мне пример или ссылку по этому поводу.Спасибо ...

Ответы [ 2 ]

3 голосов
/ 06 ноября 2011

Юникод содержит все эти символы. Вы можете просто сохранить это как строку символов, содержащую именно те символы, которые вы показываете.

Однако не ясно, что вы действительно хотите знать ... реальный вопрос о том, «как представлять X», зависит от того, что вы хотите сделать эффективно делать с X.

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

Если проблема в том, «Как я могу оценить эту формулу в наносекундах с учетом булевых значений для a, b, c, d, текстовое решение совершенно неверно. В последнем случае вы, вероятно, захотите представить его в конечном итоге как ряд машинных инструкций, которые могут быть непосредственно выполнены процессором.

Существует множество промежуточных вариантов, популярным из которых является Абстрактные деревья синтаксиса (AST) , которые хороши для представления выражений. Такое дерево имеет операторные узлы, содержащие типы операторов (не, и, или), листовые узлы, представляющие переменные a, b, c, d. Узлы оператора связаны с дочерними узлами, которые могут быть другими операторами или листьями; таким образом вы строите дерево. (Список S-выражений - забавный способ записать такое дерево).

Узлы AST создаются в Java с помощью классов, представляющих операторы и операнды. У узлов операторов есть члены, которые являются объектами, ссылающимися на другие узлы операторов или конечные узлы. Вы можете увидеть пример здесь: Структура данных дерева Java?

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

1 голос
/ 06 ноября 2011

В Java (если a, b, c и d - логические значения):

¬ эквивалентно !

эквивалентно &&

эквивалентно ||

...