我有一个复杂的条件,带有 AND 和 OR,例如:
(c1 OR c2) AND (c3 OR c4 OR c5)
这相当于:
(c1 AND c3) OR (c1 AND c4) OR (c1 AND c5) OR (c2 AND c3) OR (c2 AND c4) OR (c2 AND c5)
然后可以将该条件分解为仅包含 AND 的条件列表:
c1 AND c3
c1 AND c4
c1 AND c5
c2 AND c3
c2 AND c4
c2 AND c5
这种转变总是可能的吗?什么算法可以做到?
条件以树的形式存储在内存中,例如:
OR
/ \
AND c1
/ ! \
c2 c3 c4
我认为我们应该尝试通过使用分布将 OR 向上“移动”:
(a OR b) AND c = (a AND c) OR (b AND c)
.
这是一个好方法吗?