最近、パズルを解くのにSATを使用するRedditの記事がありました[1]。これは私にこの「SAT」のことを非常に興味深いものにしました。私はWikipediaの記事を読んでいますが、あなたの誰かに私にとってそれをより一般的な言葉で説明するように頼んでみたいと思います。SATとは何ですか?
SATとは何ですか?それは何のために良いですか?それは木構造を横断するために使用できますか?テキストを解析するには?改行[2]のために?ビンパッキング[3]?それは一種の最適化技術ですか?
関連するノートでは、NP対Pは、ゼロにセットされた合計の数を選択することと、いくつかの数がゼロになるかどうかをチェックすることです。
[1] http://www.reddit.com/r/programming/comments/pxpzd/solving_hexiom_really_fast_with_a_sat_solver/
[2] http://en.wikipedia.org/wiki/Line_wrap
[3] http://en.wikipedia.org/wiki/Bin_packing_problem
SAT(アルゴリズムの文脈で)は、[ブール充足可能性問題](http://en.wikipedia.org/wiki/Boolean_satisfiability_problem)であり、与えられたブール式の変数を設定して、 TRUEと評価されます。たとえば 'p(x)= not x'では' x = FALSE'を設定できるので、 'p'は充足可能です。しかし、 'q(x)= x && not x'では' q'をTRUEにするために 'x'を設定することはできませんので、' q'は充足できません。 –
しかし、それが役に立つかもしれない簡単な "現実の"例はありますか?つまり、(純粋な)ソリューションが存在するが、SATを使用すると、それは、言い換えれば、より速くなるということですか? –
SATが高速化できる例がいくつかあります。Linuxパッケージマネージャーの依存関係分析は、多くの場合、libsatsolverを使用して行われます。 SATを使用した暗号化攻撃の例もいくつかあります。バックトラッキングアルゴリズムを使用するほとんどの問題は、libsatsolverなどの優れたSATsolver実装を使用することで高速化できます。 – LiKao