औपचारिक रूप से, s ( U , Q ) = { V | वी ∈ यू और वी ⊆ क्यू } जहां यू , क्यू , और वी सभी सेट का प्रतिनिधित्व करते हैं, और यू , और अधिक विशेष, सेट का एक सेट का प्रतिनिधित्व करता है। उदाहरण के लिए, यू एक कुकबुक में विभिन्न व्यंजनों के लिए आवश्यक अवयवों का एक सेट (सेट) हो सकता है क्यू के साथ सामग्री का सेट जो मैं वी का प्रतिनिधित्व करता हूं एक नुस्खा है जो मैं उन सामग्रियों के साथ बना सकता हूं। क्वेरी s ( U , Q)) प्रश्न से मेल खाती है "मैं इन सामग्रियों के साथ क्या बना सकता हूं?"
क्या मैं के लिए देख रहा हूँ एक डेटा प्रतिनिधित्व कि अनुक्रमित है यू इस तरह से है कि यह की कुशल प्रश्नों का समर्थन करता है रों ( यू , क्यू ) जहां क्यू और के सभी सदस्यों यू आम तौर पर सभी के सदस्यों के संघ की तुलना में छोटा हो जाएगा यू । इसके अलावा, मैं चाहूंगा कि यह कुशलतापूर्वक यू को अपडेट करने में सक्षम हो (जैसे, एक नुस्खा जोड़ें या निकालें)।
मैं मदद नहीं कर सकता, लेकिन सोचता हूं कि इस समस्या को अच्छी तरह से समझा जाना चाहिए, लेकिन मैं इसके लिए कोई नाम या संदर्भ नहीं पा सका हूं। क्या किसी को इसे कुशलतापूर्वक या ऐसी जगह पर हल करने की रणनीति के बारे में पता है जहां मैं इसके बारे में अधिक पढ़ सकता हूं?
जहाँ तक एक समाधान के बारे में सोचने के बाद, मुझे लगा कि मुझे सेट यू के लिए एक निर्णय पेड़ बनाना है । पेड़ में प्रत्येक नोड पर, सवाल "क्या आपके घटक सूची में x है ?" यू के सदस्यों की संख्या को अधिकतम करने के लिए चुने गए एक्स के साथ पूछा जाएगा जो उत्तर द्वारा समाप्त हो जाते हैं। जैसे ही यू अपडेट होता है, सही परिणाम खोजने के लिए आवश्यक प्रश्नों की संख्या को कम करने के लिए इस निर्णय पेड़ को फिर से संतुलित करने की आवश्यकता होगी। एक और विचार यू का प्रतिनिधित्व करने के लिए है एक n -dimensional बूलियन 'ऑक्ट्री' (जहां एन अद्वितीय सामग्री की संख्या है) की तरह कुछ के साथ ।
मेरा मानना है कि "इन सामग्रियों के साथ क्या व्यंजन बनाया जा सकता है?" कुकबुक में कार्टेसियन उत्पाद (व्यंजनों के लिए आवश्यक सामग्री के सेट) को लेने के लिए उत्तर दिया जा सकता है, जिसमें किसी एक की पॉवरसेट के साथ रेसिपी और जोड़े के लिए परिणामित ऑर्डर किए गए जोड़े को फ़िल्टर करना है जिसमें दोनों तत्व समान हैं, लेकिन यह एक नहीं है कुशल समाधान, और मैं इस बारे में पूछ रहा हूं कि इस तरह के ऑपरेशन का अनुकूलन कैसे किया जाए; कोई इसे SQL में कैसे लिखेगा, यह कुशल होगा और SQL ऐसा क्या करता है जिससे यह कुशल हो सके?
यद्यपि मैं व्यंजनों की एक रसोई की किताब का चित्रण और सामग्री के एक सेट का उपयोग करता हूं, लेकिन मैं आशा करता हूं कि 'व्यंजनों' की संख्या और 'सामग्री' की संख्या बहुत बड़ी होगी (प्रत्येक के सैकड़ों सैकड़ों तक), हालांकि अवयवों की संख्या किसी दिए गए नुस्खा में और किसी दिए गए घटक सेट में अवयवों की संख्या अपेक्षाकृत छोटी होगी (शायद एक ठेठ 'नुस्खा' के लिए लगभग 10-50 और एक ठेठ 'घटक सेट' के लिए लगभग 100)। इसके अतिरिक्त, सबसे सामान्य ऑपरेशन क्वेरी एस ( यू , क्यू ) होगा, इसलिए यह सबसे इष्टतम होना चाहिए। इसका यह भी अर्थ है कि एक क्रूर बल एल्गोरिथ्म जिसमें हर नुस्खा की जांच करने या हर घटक पर काम करने की आवश्यकता होती है, हालांकि यह अपने आप ही अवांछित रूप से धीमा होगा। चालाक कैशिंग के साथ,