正式には、s(U、Q)= { V | V ∈ UとV ⊆ Q } U、Q、およびVがすべてのセットを表し、Uは、より具体的には、セットの集合を表します。例として、Uはクックブックのさまざまなレシピに必要な材料のセット(セット)であり、Qは材料のセットを表し、Vはそれらの材料で作成できるレシピを表します。クエリs(U、Q)「これらの成分で何が作れるのか」という質問に対応します
私が探しているインデックスというデータ表現であるU、それはの効率的なクエリをサポートするような方法で、Sを(U、Qは)ここで、QとのすべてのメンバーUは、一般的に、すべてのメンバーの組合に比べて小さくなりますU。さらに、Uを効率的に更新できるようにしたい(たとえば、レシピの追加または削除)。
私はこの問題をよく理解する必要があると思わずにはいられませんが、名前やリファレンスを見つけることができませんでした。これを効率的に解決するための戦略、または私がそれについてもっと読むことができる場所を誰かが知っていますか?
解決策について考える限り、私が持っていたのは、集合Uの決定木を構築することでした。ツリーの各ノードで、「成分リストにxが含まれていますか?」という質問 回答によって排除されるUのメンバーの数を最大化するためにxを選択して尋ねられます。Uが更新され、この決定木は、正しい結果を見つけるために必要な質問の数を最小限にするために再バランスする必要があります。もう1つの考えは、n次元のブール「オクトリー」(nは一意の成分の数)のようなものでUを表すことです。
「これらの成分でどんなレシピが作れるの?」クックブック内の(必要な成分のセット)レシピのデカルト積を、ある成分のパワーセットで取得し、両方の要素が等しいペアの結果として順序付けられたペアをフィルタリングすることで応答できますが、これは効率的な解決策、そして私が求めているのは、この種の操作を最適化する方法です。効率的になるようにSQLでこれをどのように構成し、これを効率的にするためにSQLで何ができるのでしょうか。
私はレシピと食材のセットのクックブックのイラストを使用していますが、「レシピ」の数と「食材」の数は非常に多くなると予想します(それぞれ数十万まで)。ただし、食材の数は特定のレシピでは、特定の材料セットの材料の数は比較的少なくなります(通常、「レシピ」の場合は約10-50、一般的な「材料セット」の場合は約100)。さらに、最も一般的な操作はクエリs(U、Q)であるため、最も最適なはずです。これはまた、すべてのレシピをチェックしたり、すべての材料を操作したりする必要があるブルートフォースアルゴリズムは、それだけでは望ましくないほど遅くなることを意味します。巧妙なキャッシングで、