Resmi olarak, s ( U , Q ) = { V | V ∈ U ve V ⊆ Q }, burada U , Q ve V'nin hepsi kümeleri temsil eder ve U , daha spesifik olarak bir kümeyi temsil eder. Örnek uğruna, U , bir yemek kitabındaki çeşitli tarifler için gerekli olan (bir dizi) içerik seti olabilir; Q , bu malzemelerle yapabileceğim bir tarifi temsil eden V sahip olduğum bileşen kümesini temsil eder. Sorgu s ( U , Q) "Bu malzemelerle ne yapabilirim?" sorusuna karşılık gelir.
Ne aradığım endeksler bir veri temsilidir U şekilde bu verimli sorguları desteklediğini s ( U , Q ) Q ve tüm üyeleri U genellikle üyelerinin hepsi birliği ile karşılaştırıldığında küçük olacaktır U . Ayrıca, etkin bir şekilde U güncellemesini istiyorum (örneğin, bir tarif ekleyin veya çıkarın).
Yardım edemem ama bu sorunun iyi anlaşılması gerektiğini düşünüyorum, ancak bunun için bir ad veya referans bulamadım. Bunu verimli bir şekilde çözme stratejisi veya hakkında daha fazla bilgi edinebileceğim bir yer bilen var mı?
Bir çözüm düşünmeye gelince, bir düşüncem U kümesi için bir karar ağacı oluşturmaktı . Ağaçtaki her düğümde "içerik listeniz x içeriyor mu?" cevap tarafından kaldırılan U üyesi sayısını en üst düzeye çıkarmak için seçilen x ile sorulur . Gibi U güncellenir, bu karar ağacı yeniden dengeli doğru sonucu bulmak için gerekli soruların sayısını en aza indirmek için olması gerekir. Başka bir düşünce, U'yu n boyutlu bir boole 'oktree' gibi bir şeyle temsil etmektir (burada n benzersiz bileşenlerin sayısıdır).
"Bu malzemelerle hangi tarifler yapılabilir?" yemek kitabındaki tariflerin kartezyen ürününü (için gerekli olan malzeme setlerini) alarak, içerdiği bileşenlerin güç seti ile ve her iki elementin eşit olduğu çiftler için elde edilen sıralı çiftleri filtreleyerek cevaplanabilir, ancak bu bir verimli bir çözümdür ve sorduğum şey, bu tür bir operasyonun nasıl optimize edileceği; SQL'de bunu verimli olacak şekilde nasıl oluşturabilir ve SQL'in etkili olmasına izin veren ne yapar?
Yemek tarifleri ve bir dizi malzemenin resmini kullanmama rağmen, 'tariflerin' sayısının ve 'içeriklerin' sayısının çok fazla (her biri yüzbinlerce) olacağını tahmin ediyorum belirli bir tarifte ve belirli bir bileşen setindeki bileşenlerin sayısı nispeten az olacaktır (tipik bir 'tarif' için muhtemelen 10-50 ve tipik bir 'içerik seti' için yaklaşık 100 olacaktır). Ayrıca, en yaygın işlem s ( U , Q ) sorgusu olacaktır , bu yüzden en uygun olmalıdır. Bu aynı zamanda her tarifi kontrol etmeyi veya her bileşen üzerinde çalışmayı gerektiren kaba kuvvet algoritmasının kendi başına istenmeyen bir şekilde yavaş olacağı anlamına gelir. Akıllı önbellekleme ile,