私は式を抽象構文木に構文解析するa little appと書いています。今、クエリに対して最も良い評価をする方法を決定するために、式に対して一連の発見的手法を使用します。残念ながら、クエリプランを極端に悪化させる例があります。任意のブール式を結合型または論理和型に変換する方法は、どこで見つけることができますか?
質問の評価方法を推測する方法がわかりましたが、確かに正解を得るためには、まず式をCNFまたはDNFに入力する必要があります。私はこれが潜在的に指数関数的な時間と空間をもたらす可能性があることを知っていますが、典型的なクエリではユーザーはこれを実行しても問題ありません。
ここで、CNFまたはDNFに変換することは、複雑な表現を簡素化するために常に手作業で行うことです。 (まあ、はいつもですが、私はそれがdemorganの法則や分布法などを使ってどうやっているのか分かります)しかし、それをアルゴリズムとして実装可能な方法に変換する方法はわかりません。私はクエリの最適化に関する論文を見てきましたが、「まず最初に私たちは物事をCNFに入れます」または「最初に物事をDNFに入れる」というものから始まり、それを達成する方法を決して説明していないようです。
どこから始めたらよいですか?数量詞フリー式のため
私の仕事を始めるには十分です。ありがとう:) –
いくつかの用語(例えば、複数のレベルのネストされたANDおよびORと多くの変数)がある場合に、「OR OR AND AND」へのポインタはありますか? – jamie
@Jamie:すべてのペアに対して繰り返し計算を行う必要があります。 FOILingとはまったく違いはありません:)。最悪の場合、これには指数関数的な時間がかかります。 (CNFまたはDNFへの変換は、元のNP完全な問題、充足可能性の中心にあります) –