最小の反復を使用してJavaで論理式を解きます

言うだろう:

私はの備えJavaで論理式を解くことに取り組んでいるOR、およびNOT演算子を。

入力された場合は、プログラムが出力しているTRUE含まれる変数のいずれかのブール値のために。私は正常にそれをやったが、それは効率的では十分ではありません。

私の現在のソリューションは次のようになります:

式の各変数の真理値表を作成し、行ごとに評価します。

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

上記の例では、私は、変数の真理値表と式全体を評価する必要がありますp q r s

今、私はこのように書き代替ソリューションを実装すると思っている:上記の例を考えてみましょう。

私たちも、ちょうど解くことであることに気づくことができますp ∧ ¬q一部を、表現のすべてがために出てきますTRUEこれは、私たちに3つの余分な変数の手間を節約できます。

さて、私の質問はこれです。JAVAでこれをプログラムする方法は?どのように私も、入力が上記のようなパターンを持っていないかどうかを知ることができますか?それとも、私が全体の真理値表のために評価しなければならないことだけで表現でしょうか?以下のような

(p ∨ ¬q) ∧ (r ∨ (s ∧ (¬p ∨ u)))
サム:

これはよく知られてNP完全問題である、参照ブール充足問題

この手段には多項式時間ソリューションが知られていないが、そこに多くの> Pソリューションがあります。

あなたはどこのことができます。それをブルートフォースと短絡する必要があります。(例:すべての演算子がある場合はor、あなたが見つけるtrueあなたが計算を停止することができます値)

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=201973&siteId=1