जवाबों:
आप इसे किसी भी निरंतर \ epsilon> 0 के लिए समय में हल नहीं कर सकते, जब तक कि मजबूत घातीय समय की परिकल्पना झूठी न हो।
यही है, अगर हमारे पास ऐसा एल्गोरिथ्म था, तो हम कुछ (epsilon ') 0 के लिए O ((2- \ epsilon') ^ {n}) समय में परिवर्तनीय CNF संतुष्टि को हल कर सकते हैं । कारण यह है कि हम चर को दो समान भागों P_1 और P_2 के n / 2 चर में विभाजित कर सकते हैं । प्रत्येक भाग के लिए हम निम्न प्रकार से खंडों के सबसेट के क्रमशः F_1 और F_2 एक परिवार का निर्माण करते हैं। प्रत्येक असाइनमेंट के लिए हम एक उपसमूह जोड़ते हैं जो असाइनमेंट से संतुष्ट नहीं होते हैं। यह निर्माण पाली (n) 2 ^ {n / 2} समय में चलता है ।
निर्माण को पूरा करने के लिए, हम ध्यान दें कि मूल CNF उदाहरण में एक समाधान है यदि में एक सबसेट है जो में कुछ सबसेट के लिए ।
प्रत्येक खंड के लिए लोगों के अलावा अपने ग्राउंड सेट में कुछ अतिरिक्त तत्वों को जोड़ना, सेट अपवर्जन के सवाल के रूप में इस असंगति समस्या को एम्बेड करना बहुत मुश्किल नहीं है। आप मूल रूप से में सबसेट के पूरक लेते हैं । यह सुनिश्चित करने के लिए कि में दो सेटों को शामिल नहीं किया गया है, आप अतिरिक्त तत्वों पर एंटी-चेन से एक कोड जोड़ते हैं। एक अन्य विरोधी श्रृंखला कोड (जमीन सेट के अन्य अतिरिक्त तत्वों पर) के सबसेट पर प्रयोग किया जाता है यकीन से सबसेट का कोई युग्म बनाने के लिए एक शामिल किए जाने के रूप में। अंत में, से गठित सभी सेटों में के एंटी-चेन कोड के सभी तत्व शामिल हैं ।
यह एक सेट ग्राउंड सेट पर सबसेट प्रश्न है । यह तर्क मूल रूप से रेयान विलियम्स के कुछ शुरुआती कागज़ात (जो याद नहीं कर सकता) पर वापस चला जाता है।
यदि आप साथ सेट परिवारों में रुचि रखते हैं , तो वैचारिक रूप से एक और समाधान युवल के उत्तर में उल्लिखित एक के समान है जो जेटा परिवर्तन की गणना करता है
जहाँ इनपुट परिवार का सूचक कार्य है । अर्थात, यदि और अन्यथा। स्पष्ट रूप से सेट ऐसे हैं कि अगर और केवल अगर कुछ के लिए ।
ज़ेटा परिवर्तन की गणना समय येट्स के एल्गोरिथ्म का उपयोग करके की जा सकती है, उदाहरण के लिए नूथ के TAOCP, वॉल्यूम देखें। 2, §4.6.4। एल्गोरिथ्म अपने आप में एक बहुत ही सरल गतिशील प्रोग्रामिंग है, और यदि कोई मौजूद है, तो इसमें शामिल सेट का उदाहरण देना आसान है।
तीव्र मैट्रिक्स गुणन के लिए एल्गोरिथ्म का उपयोग करके इस समस्या को हल किया जा सकता है, और मुझे यह भी संदेह है कि यह कम्प्यूटेशनल रूप से मैट्रिक्स गुणा के बराबर है (हालांकि मुझे यह साबित करने का कोई तरीका नहीं पता है, और मुझे नहीं लगता कि यह साबित करने के लिए तकनीक मौजूद है )। इस समाधान में O (n ^ {2.373}) का चलने का समय होगा जब n = d, और d और n के बीच अन्य संबंधों के लिए अन्य चल रहा समय होगा।
यहां बताया गया है कि आप मैट्रिक्स गुणा का उपयोग करके इसे कैसे हल करते हैं: आप डी मैट्रिक्स ए द्वारा एन की पंक्तियों में सेट की विशेषता वैक्टर लिखते हैं, और एन मैट्रिक्स बी द्वारा विज्ञापन के कॉलम में सेट के पूरक के वैक्टर। फिर बी द्वारा ए को गुणा करें। सेट के जोड़े जो प्रतिच्छेद करते हैं, वे उत्पाद ए * बी के स्थान हैं जो शून्य के बराबर हैं।
इस समस्या के लिए सबसे अच्छा समय चल रहा है, इस विषय पर हुआंग और पैन के पेपर देखें। अगर मुझे सही से याद है, जब d काफी बड़ा हो जाता है, तो चलने का समय स्पष्ट रूप से इष्टतम O (nd) बन जाएगा। N = d के लिए, आपके पास O (n ^ {2.373}) का चलने का समय होगा। N और d के अन्य संबंधों के लिए, आपको अन्य मूल्य मिलेंगे। यदि आयताकार मैट्रिक्स गुणन के लिए एक इष्टतम एल्गोरिथ्म मौजूद है, तो आपको अपनी समस्या के लिए रनिंग टाइम O (n ^ 2 + nd) के साथ एक एल्गोरिथ्म मिलेगा। मुझे संदेह है कि आपकी समस्या को हल करने के लिए इससे बेहतर कोई तरीका नहीं है, लेकिन मैं यकीन से बहुत दूर हूं।
यह समाधान संभवतः व्यावहारिक उपयोग का नहीं है, क्योंकि इन एल्गोरिदम के स्थिरांक बहुत बड़े हैं। स्ट्रैसन का एल्गोरिथ्म n और d के उचित मूल्यों के लिए भोले समाधान पर एक सुधार दे सकता है, लेकिन मैं इसके बारे में निश्चित भी नहीं हूं। हालाँकि, ऐसी समस्याएं जो मैट्रिक्स गुणन से संबंधित हैं, शायद ही कभी दहनशील एल्गोरिदम के बारे में लगता है जो भोले एल्गोरिथ्म (पॉलीग्लिथेरिक कारकों से अधिक) से बेहतर है, इसलिए यदि मुझे अनुमान लगाना था, तो मुझे लगता है कि आपकी समस्या का कोई अच्छा एल्गोरिथ्म नहीं है। वर्तमान समय की तकनीकों का उपयोग करते हुए भोले की तुलना में काफी बेहतर है।
यदि तो हम जानते हैं कि सेट Sperner के लेम्मा द्वारा एक एंटीचिन नहीं है, और इसलिए समस्या का निर्णय संस्करण तुच्छ हो जाता है। लेकिन उस मामले पर विचार करना दिलचस्प हो सकता है जहां उस मूल्य के करीब है।
एर्दो-को-राडो प्रमेय पर फ्राइडगट का काम दर्शाता है कि के सबसेट के परिवार के एक व्यक्ति की विशेषता वेक्टर , एक समय कि क्या एक अन्तर्विभाजक परिवार है ( प्रत्येक दो तत्व एक दूसरे को काटना)। अधिक आम तौर पर, उनकी पद्धति हमें गणना करने की अनुमति देती है जहां कुछ (विशिष्ट) ज्ञात फ़ंक्शन है जो गैर- है शून्य केवल अगर असंतुष्ट हैं। केवल के हिस्टोग्राम पर निर्भर करता है , जहां लिए संकेतक है ।
(एक तरफ के रूप में, हम टिप्पणी करते हैं कि उनकी विधि भी काम करती है अगर हमें दो परिवार दिए जाते हैं , और में रुचि रखते हैं । दोनों ही मामलों में, हमें -ewewed Fourier-Walsh के रूपांतरण की गणना करने की आवश्यकता है एक मनमाना , और फिर , जहां केवल का आलोचनात्मक वजन पर निर्भर करता है ।)
यह सब हाथ में समस्या से कैसे संबंधित है? परिवार पर विचार करें प्रत्येक हर । चूंकि स्पष्ट रूप से दिया गया है, हम इन जोड़े के योगदान की गणना to । क्या कोई और असंतुष्ट जोड़े हैं? यदि से संबंध तोड़ना है तो और इतने । तो एक iff है
यह एल्गोरिदम समय में चलता है , कारकों को अनदेखा करना में बहुपद । जब करीब होता है , तो यह से काफी बेहतर होता है । सामान्य तौर पर, हमें रूप में लंबे समय तक सुधार मिलता है ।
यह देखते हुए कि हम जानते हैं कि संतुष्ट करने वाली एक जोड़ी मौजूद है, हम इसे कैसे हैं? मान लीजिए कि हमने को दो समूहों में किया है यादृच्छिक पर। लगभग संभावना के साथ , सेट और खुद को एक ही समूह में पाएंगे। अगर हम इतने खुशकिस्मत हैं, तो हम और पर अपना एल्गोरिथ्म चला सकते हैं , जिसमें से कोई भी इनको खोजता है, और इसलिए हमारे द्वारा सेट किए जाने वाले सेटों की संख्या को आधा कर दें। यदि नहीं, तो हम फिर से कोशिश कर सकते हैं। इससे पता चलता है कि ओरेकल कॉल की एक निश्चित संख्या के साथ निर्णय संस्करण में, हम वास्तव में संतुष्ट करने वाला जोड़ा पा सकते हैं ।
हम एल्गोरिथ्म को भी आरेखित कर सकते हैं। सामान्यता के नुकसान के बिना, मान लीजिए । प्रत्येक चरण में, हम प्रत्येक बिट के अनुसार विभाजन करते हैं । इनमें से एक विभाजन हमेशा और को एक ही भाग में रखेगा , जब तक कि उनके विपरीत ध्रुवीयता न हो; हम केवल परिचालनों का उपयोग करके इस के लिए परीक्षण कर सकते हैं । यह निर्णय संस्करण में ओरेकल कॉल का उपयोग करके एक नियतात्मक एल्गोरिथ्म देता है ।