मैंने a little app लिखा है जो अमूर्त वाक्यविन्यास पेड़ों में अभिव्यक्तियों को पार्स करता है। अभी, मैं यह निर्णय लेने के लिए अभिव्यक्ति के खिलाफ हेरिस्टिक्स का एक गुच्छा का उपयोग करता हूं कि क्वेरी का सर्वोत्तम मूल्यांकन कैसे किया जाए। दुर्भाग्यवश, ऐसे उदाहरण हैं जो क्वेरी योजना को बहुत खराब बनाते हैं।मुझे मनमानी बुलियन अभिव्यक्ति को संयोजन या विचित्र सामान्य रूप में बदलने के लिए एक विधि कहां मिल सकती है?
मैं एक तरह से provably कैसे प्रश्नों मूल्यांकन किया जाना चाहिए करने के लिए के रूप में बेहतर अनुमान बनाने के लिए मिल गया है, लेकिन मैं आदेश provably सही जवाब पाने के लिए पहले CNF या DNF में मेरी अभिव्यक्ति डाल करने के लिए की जरूरत है। मुझे पता है कि इसका संभावित रूप से घातीय समय और स्थान हो सकता है, लेकिन सामान्य प्रश्नों के लिए मेरे उपयोगकर्ता इसे चलाते हैं, यह कोई समस्या नहीं है।
अब, सीएनएफ या डीएनएफ में कनवर्ट करना जटिल अभिव्यक्ति को सरल बनाने के लिए हर समय हाथ से कुछ करता है। (ठीक है, शायद हर समय नहीं है, लेकिन मुझे पता है कि यह कैसे किया गया है जैसे कि डेमोरगन के कानून, वितरण कानून इत्यादि) हालांकि, मुझे यकीन नहीं है कि एक एल्गोरिदम के रूप में लागू करने योग्य विधि में इसका अनुवाद कैसे शुरू किया जाए । मैंने क्वेरी ऑप्टिमाइज़ेशन पर कागजात देखे हैं, और कई लोग "अच्छी तरह से पहले हम चीजों को सीएनएफ में डालते हैं" या "पहले हमने चीजों को डीएनएफ में डाल दिया" के साथ शुरू किया, और वे इसे पूरा करने के लिए अपनी विधि को कभी नहीं समझते।
मुझे कहां से शुरू करना चाहिए?
मेरी शुरुआत करने के लिए पर्याप्त है। धन्यवाद :) –
कुछ बिंदुओं से अधिक होने पर "वितरित या अधिक" करने के लिए किसी भी पॉइंटर्स (जैसे नेस्टेड एंड्स और ओआरएस और कई चर के कई स्तर)? – jamie
@ जैमी: आपको प्रत्येक जोड़ी के लिए एक बार गुणा करने की आवश्यकता है। यह फोइलिंग से अलग नहीं है :)। सबसे बुरे मामले में, यह घातीय समय लेता है। (सीएनएफ या डीएनएफ में कनवर्ट करना मूल एनपी पूर्ण समस्या, संतुष्टि के दिल में है) –