用最少的迭代次数来解决Java中的逻辑表达式

时间:2019-02-18 18:11:50

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

我正在努力解决Java中由 AND OR NOT 运算符组成的逻辑表达式。

如果所输入的变量的布尔值是TRUE,则程序必须输出。我已经成功完成,但是效率不够。

我当前的解决方案如下:

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

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

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

现在,我正在考虑实现这样的替代解决方案: 考虑上面的例子。

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

现在,我的问题是这个。如何用JAVA编程?我什至如何知道输入是否具有上述模式?还是仅是我必须对整个真值表进行评估的一种表达方式?像下面的那个

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

1 个答案:

答案 0 :(得分:5)

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

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

您将不得不对其进行暴力破解,并在可能的地方短路。 (例如:如果所有运算符均为or,而您发现一个true值则可以停止计算)