0

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)

それは良いアプローチですか?

4

2 に答える 2

2

選言標準形(または接続詞)を見てください。しかし、どちらもとだけANDでなく、も使用してORNOTます。

OR: sとsのみで制限されている場合AND(および他のブール関数を使用できない場合)、Postの機能的完全性定理のためにブール関数を表現することさえできません(両方ANDともOR真理を保持し、基礎)。したがって、変換できない式があるかもしれません。

于 2013-02-19T12:04:57.840 に答える
0

(a or b) and c論理的にはと同等(a and c) or (b and c)です。ただし、ブール式の短絡をサポートする言語では、 falseであるかどうかc and (a or b)を評価する必要がないという理由で、おそらくそれをとして書くことになります。(a or b)c

これは、変数参照だけでなく、aまたは高価な関数呼び出しの場合に特に当てはまります。b

于 2013-02-19T12:06:35.493 に答える