【问题标题】:Solving logical expressions in Java with minimum iterations用最少的迭代解决 Java 中的逻辑表达式
【发布时间】:2019-02-18 18:11:50
【问题描述】:

我正在解决 Java 中由 ANDORNOT 运算符组成的逻辑表达式。

如果输入为TRUE,程序必须输出包含变量的任何布尔值。我已经成功了,但是效率不够。

我目前的解决方案是这样的:

为表达式中的每个变量制作一个真值表并逐行计算。

(p ∧ ¬q) ∨ (r ∧ s) ∨ (¬p ∨ u)

在上面的示例中,我必须使用变量真值表 p q r s 来评估整个表达式。

现在,我正在考虑实施一个替代解决方案,如下所示: 考虑上面的例子。

我们可以注意到,即使只解决了p ∧ ¬q 部分,所有的表达式都是TRUE。这为我们省去了 3 个额外变量的麻烦。

现在,我的问题是这样的。如何在 JAVA 中编程?我什至如何知道输入是否具有上述模式?或者它只是我必须为整个真值表评估的表达式?像下面那个

(p ∨ ¬q) ∧ (r ∨ (s ∧ (¬p ∨ u)))

【问题讨论】:

标签: java performance logical-operators coding-efficiency truthtable


【解决方案1】:

这是一个众所周知的 NP 完全问题,请参阅 Boolean Satisfiability Problem

这意味着没有已知的多项式时间解,但有很多 >P 解。

您将不得不强行使用它并尽可能短路。 (例如:如果所有运算符都是 or 并且您找到 true 值,您可以停止计算)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-03
    • 2020-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多