查找真值组合的数量

时间:2015-02-08 00:03:10

标签: java boolean expression combinations

我有一个问题在做。

p,q和r的真值的多少组合使这个表达式成立? (p&&!q)|| (q ||!r)

我知道答案是7,但我不知道他们是如何得到答案的。我可以简单地测试每个组合(8是最大值,2 ^ 3),但有更快的方法可以做到这一点吗?表达式可以简化吗?

2 个答案:

答案 0 :(得分:1)

这当然不需要详尽的搜索。你可以推理如下:

  1. 由于|| !r您知道与r == false的4种组合满足表达式
  2. 由于|| q您知道剩余的4个组合,q == true的2符合表达式
  3. 由于(p && !q)您知道剩余的2个组合中的q == false都有q == true(因为您已经考虑了上面p == true的情况)所以(p && !q) || q p || q 1}}满足表达式
  4. 添加这些,你有7个组合满足表达。

    至于简化表达式,p || q || !r相当于!(!p && !q && r)。因此表达式可以简化为{{1}}。这也可以表示为{{1}},这清楚地表明为什么有7种组合:只有一种组合不满足表达式。

答案 1 :(得分:0)

要回答第二个问题,“可以简化吗?”:在布尔代数中,表达式

a || (!a && b)

相当于

a || b

查看原始表达:

(p && !q) || (q || !r)

请注意||是关联的(&&也是如此),因此您可以重新排列括号:

((p && !q) || q) || !r

第一部分是我答案顶部的等价情况,因此

((p && !q) || q)

相当于

p || q

(请注意||&&都是可交换的),因此整个表达式相当于

p || q || !r