इसी तरह के इनपुट के बैच पर बूलियन सर्किट का मूल्यांकन करें


10

मान लीजिए मेरे पास बूलियन सर्किट है C कुछ फ़ंक्शन की गणना करता है f:{0,1}n{0,1}। मान लें कि सर्किट से बना है, या, और अधिकतम 2 पर प्रशंसक और पंखे के साथ गेट्स नहीं है।

चलो x{0,1}nएक दिया गया इनपुट हो। दिया हुआC तथा x, मैं मूल्यांकन करना चाहता हूं C पर n इनपुट जो भिन्न होते हैं x एक बिट स्थिति में, यानी, गणना करने के लिए n मान C(x1),C(x2),,C(xn) कहाँ पे xi के समान है x सिवाय इसके कि iगु बिट फ़्लिप है।

क्या ऐसा करने का एक तरीका है जो अधिक कुशल है जो स्वतंत्र रूप से मूल्यांकन कर रहा है C n समय पर n अलग-अलग इनपुट?

मान लीजिये C शामिल mफाटकों। फिर स्वतंत्र रूप से मूल्यांकनC सब पर n इनपुट्स लेंगे O(mn)समय। क्या गणना करने का कोई तरीका हैC(x1),C(x2),,C(xn) में o(mn) समय?


वैकल्पिक संदर्भ: यदि हमारे पास एक अंकगणित सर्किट था (जिसके द्वार गुणा, जोड़ और नकार) हैंR, तो यह गणना करने के लिए संभव होगा n दिशात्मक व्युत्पत्ति fxi(x) में O(m)समय। मूल रूप से, हम ढाल (बैक-प्रचार / श्रृंखला नियम) की गणना के लिए मानक तरीकों का उपयोग कर सकते हैंO(m)समय। यह काम करता है क्योंकि संबंधित कार्य निरंतर और अलग है। मैं सोच रहा हूं कि क्या बूलियन सर्किट के लिए भी कुछ ऐसा ही किया जा सकता है। बूलियन सर्किट निरंतर और भिन्न नहीं होते हैं, इसलिए आप एक ही चाल नहीं कर सकते हैं, लेकिन शायद कुछ अन्य चतुर तकनीक का उपयोग कर सकते हैं? हो सकता है कि किसी तरह की फूरियर चाल, या कुछ और?

(भिन्न प्रश्न: यदि हमारे पास बिना पंखे वाले और बंधे हुए पंखे वाले बूलियन गेट हैं, तो क्या आप मूल्यांकन के बजाय विषम रूप से बेहतर कर सकते हैं C n बार?)


1
चूंकि एंड्रयू ने आपके प्रश्न का बहुत अच्छा जवाब दिया, इसलिए मैं सिर्फ एक टिप्पणी छोड़ दूंगा। अगरm बड़ा है (जैसे O(2n/n)) और आप मूल्यांकन कर रहे हैं C कई इनपुट पर (तक) 2o(n/logn)) तो ए है C केवल आकार का O(2n/n) जो मूल्यांकन कर सकता है C किसी पे mआदानों। (समस्या को साहित्य में "बड़े पैमाने पर उत्पादन" भी कहा जाता है।) उहलिग देखें, "विश्वसनीय तत्वों की एक छोटी संख्या के साथ कार्यात्मक तत्वों से आत्म-सुधार योजनाओं के संश्लेषण पर।" मठ .Notes Acad.Sci। यूएसएसआर 15, 558--562। तो कुछ मामलों में आप गैर-एकरूपता के साथ बेहतर कर सकते हैं।
रयान विलियम्स

जवाबों:


10

मैं इस बात की संभावना पर विचार नहीं करूंगा कि इस तरह की ट्रिक को ढूंढना आसान है और / या आपको महत्वपूर्ण लाभ देगा, क्योंकि यह नैटिवियल संतोषजनक संतुष्टि एल्गोरिदम देगा। ऐसे:

सबसे पहले, अस्थिर रूप से आसान होने पर, आपकी समस्या वास्तव में सर्किट की दी गई अधिक सामान्य समस्या को हल कर सकती है C तथा N आदानों x0,,xN1, मूल्यांकन करना C की तुलना में तेजी से सभी आदानों पर O~(N|C|)समय। कारण यह है कि हम ट्वीक कर सकते हैंC एक सर्किट में C आकार का |C|+O~(Nn) जो, इनपुट पर 0i10N1i, आउटपुट C(xi)। असल में, हम सिर्फ एक छोटी सी लुकअप टेबल बनाते हैं जो भेजता है0i10N1i सेवा xi, और इसमें तार C

बूलियन-सर्किट के बैच मूल्यांकन के लिए Nontrivial एल्गोरिदम का उपयोग तब तेजी से संतोषजनक एल्गोरिदम बनाने के लिए किया जा सकता है। यहाँ एक सरल मामले में उदाहरण दिया गया है जहाँ हम मानते हैं कि हमारे पास समय में मूल्यांकन करने वाला एक एल्गोरिथम हैO~(|C|2ϵ+(N|C|)1ϵ/2+N2ϵ) किसी भी निरंतर के लिए ϵ>0। इनपुट पर एक सर्किटC, हम विस्तार करके संतुष्टि का निर्णय ले सकते हैं C एक सर्किट में C आकार का 2n/2|C| जो पहले के सभी संभावित विकल्पों पर सिर्फ OR है n/2 के लिए इनपुट C(अन्य आदानों को छोड़कर)। हम तो बैच-मूल्यांकन करते हैंC इसके सभी पर 2n/2आदानों। अंतिम परिणाम यह है कि हम एक संतोषजनक कार्य पाते हैंC iff Cसंतोषजनक है। दौड़ने का समय हैO~(2(n/2)(2ϵ)|C|2ϵ)=O~(2n(1ϵ/2)poly(|C|))

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