सेट समावेश के लिए जाँच करने का सबसे तेज़ तरीका क्या है?


24

दिए गए n सबसेट S1,,Sn का {1,,d}

Si,SjSiSj

इस समस्या का तुच्छ समाधान में एक जोड़ी के लिए सेट और चेक शामिल किए जाने के सभी जोड़े के माध्यम से जाता है , इसलिए समग्र रनटाइम ओ (एन ^ 2 डी) है । क्या इस समस्या को तेजी से हल किया जा सकता है? क्या साहित्य में इसका कोई नाम है?O(d)O(n2d)

जवाबों:


27

आप इसे किसी भी निरंतर \ epsilon> 0 के लिए O(n2ϵ) समय में हल नहीं कर सकते, जब तक कि मजबूत घातीय समय की परिकल्पना झूठी न हो।ϵ>0

यही है, अगर हमारे पास ऐसा एल्गोरिथ्म था, तो हम कुछ (epsilon ') 0 के लिए O ((2- \ epsilon') ^ {n}) समय में n परिवर्तनीय CNF संतुष्टि को हल कर सकते हैं । कारण यह है कि हम चर को दो समान भागों P_1 और P_2 के n / 2 चर में विभाजित कर सकते हैं । प्रत्येक भाग के लिए हम निम्न प्रकार से खंडों के सबसेट के क्रमशः F_1 और F_2 एक परिवार का निर्माण करते हैं। प्रत्येक असाइनमेंट के लिए हम एक उपसमूह जोड़ते हैं जो असाइनमेंट से संतुष्ट नहीं होते हैं। यह निर्माण पाली (n) 2 ^ {n / 2} समय में चलता है ।O((2ϵ)n)ϵ>0P1P2n/2F1F2poly(n)2n/2

निर्माण को पूरा करने के लिए, हम ध्यान दें कि मूल CNF उदाहरण में एक समाधान है यदि में एक सबसेट है जो में कुछ सबसेट के लिए ।F1F2

प्रत्येक खंड के लिए लोगों के अलावा अपने ग्राउंड सेट में कुछ अतिरिक्त तत्वों को जोड़ना, सेट अपवर्जन के सवाल के रूप में इस असंगति समस्या को एम्बेड करना बहुत मुश्किल नहीं है। आप मूल रूप से में सबसेट के पूरक लेते हैं । यह सुनिश्चित करने के लिए कि में दो सेटों को शामिल नहीं किया गया है, आप अतिरिक्त तत्वों पर एंटी-चेन से एक कोड जोड़ते हैं। एक अन्य विरोधी श्रृंखला कोड (जमीन सेट के अन्य अतिरिक्त तत्वों पर) के सबसेट पर प्रयोग किया जाता है यकीन से सबसेट का कोई युग्म बनाने के लिए एक शामिल किए जाने के रूप में। अंत में, से गठित सभी सेटों में के एंटी-चेन कोड के सभी तत्व शामिल हैं ।F1F1F2F2F1F2

यह एक सेट ग्राउंड सेट पर सबसेट प्रश्न है । यह तर्क मूल रूप से रेयान विलियम्स के कुछ शुरुआती कागज़ात (जो याद नहीं कर सकता) पर वापस चला जाता है।2n/2+1d=poly(n)


त्वरित उत्तर के लिए बहुत-बहुत धन्यवाद। हमारे पास भी , यदि हम पहले स्पार्सिफिकेशन लेम्मा का उपयोग करते हैं, है ना? d=O(n)
कार्ल

9

यदि आप साथ सेट परिवारों में रुचि रखते हैं , तो वैचारिक रूप से एक और समाधान युवल के उत्तर में उल्लिखित एक के समान है जो जेटा परिवर्तन की गणना करता हैn=ω(2d/2)

fζ(T)=STf(S),

जहाँ इनपुट परिवार का सूचक कार्य है । अर्थात, यदि और अन्यथा। स्पष्ट रूप से सेट ऐसे हैं कि अगर और केवल अगर कुछ के लिए ।f:2[d]RF={S1,S2,,Sn}f(S)=1SFf(S)=0SiSjSiSjfζ(S)>1SF

ज़ेटा परिवर्तन की गणना समय येट्स के एल्गोरिथ्म का उपयोग करके की जा सकती है, उदाहरण के लिए नूथ के TAOCP, वॉल्यूम देखें। 2, §4.6.4। एल्गोरिथ्म अपने आप में एक बहुत ही सरल गतिशील प्रोग्रामिंग है, और यदि कोई मौजूद है, तो इसमें शामिल सेट का उदाहरण देना आसान है।O(d2d)


यह मेरे उत्तर की तुलना में बहुत सरल है!
युवल फिल्मस ३०'१२ को २:२०

8

तीव्र मैट्रिक्स गुणन के लिए एल्गोरिथ्म का उपयोग करके इस समस्या को हल किया जा सकता है, और मुझे यह भी संदेह है कि यह कम्प्यूटेशनल रूप से मैट्रिक्स गुणा के बराबर है (हालांकि मुझे यह साबित करने का कोई तरीका नहीं पता है, और मुझे नहीं लगता कि यह साबित करने के लिए तकनीक मौजूद है )। इस समाधान में 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 के उचित मूल्यों के लिए भोले समाधान पर एक सुधार दे सकता है, लेकिन मैं इसके बारे में निश्चित भी नहीं हूं। हालाँकि, ऐसी समस्याएं जो मैट्रिक्स गुणन से संबंधित हैं, शायद ही कभी दहनशील एल्गोरिदम के बारे में लगता है जो भोले एल्गोरिथ्म (पॉलीग्लिथेरिक कारकों से अधिक) से बेहतर है, इसलिए यदि मुझे अनुमान लगाना था, तो मुझे लगता है कि आपकी समस्या का कोई अच्छा एल्गोरिथ्म नहीं है। वर्तमान समय की तकनीकों का उपयोग करते हुए भोले की तुलना में काफी बेहतर है।


6

यदि तो हम जानते हैं कि सेट Sperner के लेम्मा द्वारा एक एंटीचिन नहीं है, और इसलिए समस्या का निर्णय संस्करण तुच्छ हो जाता है। लेकिन उस मामले पर विचार करना दिलचस्प हो सकता है जहां उस मूल्य के करीब है।n>(dd/2)2dπd/2n

एर्दो-को-राडो प्रमेय पर फ्राइडगट का काम दर्शाता है कि के सबसेट के परिवार के एक व्यक्ति की विशेषता वेक्टर , एक समय कि क्या एक अन्तर्विभाजक परिवार है ( प्रत्येक दो तत्व एक दूसरे को काटना)। अधिक आम तौर पर, उनकी पद्धति हमें गणना करने की अनुमति देती है जहां कुछ (विशिष्ट) ज्ञात फ़ंक्शन है जो गैर- है शून्य केवल अगर असंतुष्ट हैं। केवल के हिस्टोग्राम पर निर्भर करता है , जहां लिए संकेतक है ।f[m]O(m2m)ff

Σ=x,yfS(x,y),
S(x,y)0x,yS(x,y){(xi,yi):i[d]}xiix

(एक तरफ के रूप में, हम टिप्पणी करते हैं कि उनकी विधि भी काम करती है अगर हमें दो परिवार दिए जाते हैं , और में रुचि रखते हैं । दोनों ही मामलों में, हमें -ewewed Fourier-Walsh के रूपांतरण की गणना करने की आवश्यकता है एक मनमाना , और फिर , जहां केवल का आलोचनात्मक वजन पर निर्भर करता है ।)f,gΣ=xf,ygS(x,y)pf,gp(0,1/2)Σ=xT(x)f^(x)g^(x)T(x)x

यह सब हाथ में समस्या से कैसे संबंधित है? परिवार पर विचार करें प्रत्येक हर । चूंकि स्पष्ट रूप से दिया गया है, हम इन जोड़े के योगदान की गणना to । क्या कोई और असंतुष्ट जोड़े हैं? यदि से संबंध तोड़ना है तो और इतने । तो एक iff है

F={Si{x}:i[n]}{Si¯{y}:i[n]}.
Si{x}Si¯{y}S(x,y)ΣSi{x}Sj¯{y}SiSj¯=SiSjS1,,Sn
Σ=i=1nS(Si{x},Si¯{y}).

यह एल्गोरिदम समय में चलता है , कारकों को अनदेखा करना में बहुपद । जब करीब होता है , तो यह से काफी बेहतर होता है । सामान्य तौर पर, हमें रूप में लंबे समय तक सुधार मिलता है ।O~(n+2d)dn2dO~(n2)n=ω(2d/2)

यह देखते हुए कि हम जानते हैं कि संतुष्ट करने वाली एक जोड़ी मौजूद है, हम इसे कैसे हैं? मान लीजिए कि हमने को दो समूहों में किया है यादृच्छिक पर। लगभग संभावना के साथ , सेट और खुद को एक ही समूह में पाएंगे। अगर हम इतने खुशकिस्मत हैं, तो हम और पर अपना एल्गोरिथ्म चला सकते हैं , जिसमें से कोई भी इनको खोजता है, और इसलिए हमारे द्वारा सेट किए जाने वाले सेटों की संख्या को आधा कर दें। यदि नहीं, तो हम फिर से कोशिश कर सकते हैं। इससे पता चलता है कि ओरेकल कॉल की एक निश्चित संख्या के साथ निर्णय संस्करण में, हम वास्तव में संतुष्ट करने वाला जोड़ा पा सकते हैं ।SiSjS1,,SnG1,G21/2SiSjG1G2O(logn)SiSj

हम एल्गोरिथ्म को भी आरेखित कर सकते हैं। सामान्यता के नुकसान के बिना, मान लीजिए । प्रत्येक चरण में, हम प्रत्येक बिट के अनुसार विभाजन करते हैं । इनमें से एक विभाजन हमेशा और को एक ही भाग में रखेगा , जब तक कि उनके विपरीत ध्रुवीयता न हो; हम केवल परिचालनों का उपयोग करके इस के लिए परीक्षण कर सकते हैं । यह निर्णय संस्करण में ओरेकल कॉल का उपयोग करके एक नियतात्मक एल्गोरिथ्म देता है ।n=2kkxyO(nd)O(log2n)


दिलचस्प। अगर मुझे इस बारे में अधिक जानकारी लेनी है तो मुझे क्या पढ़ना चाहिए?
जेन एच। कोरोहेन

2
फ्राइडगुट के पेपर की जांच करें "परिवारों, विशिष्टता और स्थिरता को मापने के उपाय पर"।
युवल फिल्मस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.