चलो बूलियन चर का एक वेक्टर हो। आज्ञा देना दो बूलियन सर्किट पर । कहो कि , समान है यदि:
एक छोटी राशि द्वारा ग्राफ एडिट डिस्टेंस में अंतर करते हैं (उनकी एडिट दूरी सर्किट के आकार से बहुत छोटी है, कहते हैं, या कुछ छोटे स्थिरांक), जिसका अर्थ है कि मैच के लगभग सभी गेट और तार। डी में एक संबंधित गेट और तार , केवल कुछ गेटों के साथ / हटाए गए / बदले गए।
मेरी समस्या: मुझे एक सर्किट C दिया गया है , और मैं जानना चाहता हूं कि क्या कोई सर्किट D मौजूद है जो C के समान लेकिन C के समान नहीं (यानी, जहाँ x मौजूद है जैसे )।
किसी को भी इस समस्या को हल करने के लिए एक एल्गोरिथ्म का सुझाव दे सकते हैं?
यदि यह मदद करता है, तो हम सर्किट D पर ध्यान दे सकते हैं जो दिए गए सर्किट C से छोटे हैं (यानी, हम जानना चाहते हैं कि क्या कोई सर्किट D मौजूद है जैसे D C से छोटा , D C के समान , और x मौजूद है ऐसे कि )।
यदि यह मदद करता है, तो आप इसके साथ ही यह मान सकते हैं कि हम ज्ञात-सही परीक्षण मामलों दिया जाता है ऐसी है कि के लिए सभी , और हम आगे केवल जैसे कि को सभी ।
यह एक व्यावहारिक अनुप्रयोग से उत्पन्न होता है, इसलिए यदि आप इस समस्या को हल नहीं कर सकते हैं, तो किसी भी प्रकार या दिलचस्प विशेष मामले को हल करने के लिए स्वतंत्र महसूस करें। उदाहरण के लिए, किसी भी पैरामीटर या थ्रेसहोल्ड को किसी भी तरह से तुरंत मुक्त महसूस करें जो आपके लिए सुविधाजनक है। आप मान सकते हैं कि सर्किट बहुत बड़े नहीं हैं (बहुपद आकार, या कुछ और)। कार्यान्वयन के निकट-मिलान के कुछ अन्य माप द्वारा ग्राफ संपादित दूरी को बदलने के लिए स्वतंत्र महसूस करें। इसके अलावा, व्यवहार में सैट सॉल्वर अक्सर संरचित सर्किट पर आश्चर्यजनक रूप से प्रभावी होते हैं, जो कि अभ्यास में उत्पन्न होने वाले सैट को हल करने के लिए ठीक है, इसलिए यदि आप किसी सैट उपवाक्य के रूप में सैट सॉल्वर (कम से कम, यदि आप इसे किसी सैट के उदाहरण से प्राप्त कर रहे हैं, तो इसे लागू करना ठीक है) तरह एक सर्किट से )।
वैकल्पिक रूप से, किसी भी एल्गोरिदम का अभाव है, मैं अस्तित्व के सवाल में भी दिलचस्पी लूंगा: "औसत" सर्किट , क्या संभावना है कि कुछ मौजूद हैं जो सभी मानदंडों को पूरा करते हैं? (मुझे उम्मीद है कि यह संभावना बहुत कम है, लेकिन अगर ऐसा है तो मुझे कोई सुराग नहीं है।)
व्यावहारिक अनुप्रयोग यह परीक्षण करना है कि क्या सर्किट में दुर्भावनापूर्ण पिछले दरवाजे / छिपे हुए ईस्टर अंडे हो सकते हैं। इस तरह की चीज़ को सम्मिलित करने की परिकल्पना इस तरह से हो सकती है। हम एक "गोल्डन" सर्किट साथ शुरू करते हैं , जो वांछित कार्यक्षमता की गणना करता है और इसमें कोई छिपी हुई बैकडोर नहीं है। फिर, एक छिपे हुए सर्किट प्राप्त करने, छिपे हुए पिछले दरवाजे को पेश करने के लिए विरोधी लिए एक छोटा सा बदलाव करता । पिछले दरवाजे का उद्देश्य द्वारा गणना किए गए फ़ंक्शन को किसी तरह से बदलना है । यदि बहुत छोटा नहीं है, तो यादृच्छिक परीक्षण से परिवर्तन का पता लगाया जा सकता है, इसलिए एक विरोधी शायद रखने का प्रयास करेगाबहुत छोटा। इसी प्रकार, यदि बहुत से स्थानों पर से भिन्न होता है , तो इसे सर्किट के यादृच्छिक निरीक्षण द्वारा देखा जा सकता है, इसलिए एक विरोधी संभवतः परिवर्तनों की संख्या को कम करने का प्रयास करेगा। (और, जोड़े का एक परीक्षण सूट हो सकता है जो वांछित कार्यक्षमता के उदाहरणों का प्रतिनिधित्व करते हैं, इसलिए हम जानते हैं कि "गोल्डन" सर्किट जो भी है, यह संतुष्ट करता है। सभी के लिए ।) अंततः, हम सर्किट दिया जाता है (लेकिन "सुनहरा" सर्किट ), और हम जानते है कि क्या चाहते कुछ का एक संशोधित संस्करण हो सकता है, जहां इस तरह के एक छिपे हुए पिछले दरवाजे को पेश करने के लिए संशोधन किया गया था।