बाइनरी निर्णय आरेख

कंप्यूटर विज्ञान में, एक द्विआधारी निर्णय आरेख (BDD) या ब्रांचिंग कार्यक्रम एक डेटा संरचना है जिसका उपयोग बूलियन फ़ंक्शन का प्रतिनिधित्व करने के लिए किया जाता है।अधिक अमूर्त स्तर पर, BDD को सेट या संबंधों के संपीड़ित प्रतिनिधित्व के रूप में माना जा सकता है।अन्य संपीड़ित अभ्यावेदन के विपरीत, संचालन सीधे संपीड़ित प्रतिनिधित्व पर किया जाता है, अर्थात बिना विघटन के।

इसी तरह के डेटा संरचनाओं में नकारात्मक सामान्य रूप (एनएनएफ), झेगाल्किन बहुपद, और प्रस्ताव निर्देशित एसाइक्लिक ग्राफ़ (पीडीएजी) शामिल हैं।

परिभाषा
एक बूलियन फ़ंक्शन को एक निहित, निर्देशित, एसाइक्लिक ग्राफ के रूप में दर्शाया जा सकता है, जिसमें कई (निर्णय) नोड्स और दो टर्मिनल नोड्स होते हैं।दो टर्मिनल नोड्स को 0 (गलत) और 1 (सच) लेबल किया जाता है।प्रत्येक (निर्णय) नोड $$u$$ एक बूलियन चर द्वारा लेबल किया जाता है $$x_i$$ और दो बच्चे नोड्स हैं जिन्हें लो चाइल्ड और हाई चाइल्ड कहा जाता है।नोड से किनारे $$u$$ एक कम (या उच्च) बच्चा चर के लिए झूठे (या सच, क्रमशः) मूल्य के एक असाइनमेंट का प्रतिनिधित्व करता है $$x_i$$।इस तरह के एक BDD को 'ऑर्डर' कहा जाता है यदि अलग -अलग चर रूट से सभी रास्तों पर एक ही क्रम में दिखाई देते हैं।एक BDD को 'कम' कहा जाता है यदि निम्नलिखित दो नियम इसके ग्राफ पर लागू किए गए हैं:
 * किसी भी आइसोमॉर्फिक सबग्राफ को मर्ज करें।
 * किसी भी नोड को हटा दें, जिसके दो बच्चे आइसोमॉर्फिक हैं।

लोकप्रिय उपयोग में, BDD शब्द लगभग हमेशा आदेशित बाइनरी निर्णय आरेख (साहित्य में ROBDD, का उपयोग करता है, जब आदेश और कमी के पहलुओं पर जोर देने की आवश्यकता होती है) को संदर्भित करता है।एक ROBDD का लाभ यह है कि यह एक विशेष फ़ंक्शन और चर क्रम के लिए विहित (अद्वितीय) है। यह संपत्ति कार्यात्मक समकक्ष जाँच और कार्यात्मक प्रौद्योगिकी मानचित्रण जैसे अन्य संचालन में इसे उपयोगी बनाती है।

रूट नोड से 1-टर्मिनल तक एक पथ एक (संभवतः आंशिक) चर असाइनमेंट का प्रतिनिधित्व करता है जिसके लिए प्रतिनिधित्व बूलियन फ़ंक्शन सत्य है।चूंकि पथ एक नोड से कम (या उच्च) बच्चे के लिए उतरता है, तो उस नोड का चर 0 (क्रमशः 1) को सौंपा गया है।

उदाहरण
नीचे दिया गया चित्र एक द्विआधारी निर्णय पेड़ दिखाता है (कमी नियम लागू नहीं किए जाते हैं), और एक सत्य तालिका, प्रत्येक फ़ंक्शन का प्रतिनिधित्व करता है $$f(x1, x2, x3)$$।बाईं ओर के पेड़ में, फ़ंक्शन का मान एक दिए गए चर असाइनमेंट के लिए निर्धारित किया जा सकता है, जो एक टर्मिनल के लिए ग्राफ के नीचे एक पथ का अनुसरण करके होता है।नीचे दिए गए आंकड़ों में, बिंदीदार रेखाएं एक कम बच्चे के किनारों का प्रतिनिधित्व करती हैं, जबकि ठोस रेखाएं एक उच्च बच्चे के किनारों का प्रतिनिधित्व करती हैं।इसलिए, खोजने के लिए $$f(0, 1, 1)$$, X1 पर शुरू करें, बिंदीदार लाइन को X2 पर ले जाएं (चूंकि X1 में 0 का असाइनमेंट है), फिर दो ठोस रेखाओं (चूंकि X2 और X3 प्रत्येक में एक असाइनमेंट है)।यह टर्मिनल 1 की ओर जाता है, जिसका मूल्य है $$f(0, 1, 1)$$।

बाईं आकृति के बाइनरी डिसीजन ट्री को दो कटौती नियमों के अनुसार अधिकतम रूप से कम करके एक द्विआधारी निर्णय आरेख में बदल दिया जा सकता है।परिणामी 'BDD' को सही आंकड़े में दिखाया गया है।

इस बूलियन फ़ंक्शन को लिखने के लिए एक और संकेतन है $$\overline{x}_1 \overline{x}_2 \overline{x}_3 + x_1 x_2 + x_2 x_3$$।

पूरक किनारों
पूरक किनारों का उपयोग करके एक ROBDD को और भी अधिक कॉम्पैक्ट रूप से प्रतिनिधित्व किया जा सकता है। पूरक किनारों को पूरक या नहीं के रूप में कम किनारों को एनोटेट करके बनाया जाता है। यदि एक किनारे को पूरक किया जाता है, तो यह बूलियन फ़ंक्शन के नकारात्मकता को संदर्भित करता है जो नोड से मेल खाता है जो एज को इंगित करता है (बूलियन फ़ंक्शन बीडीडी द्वारा रूट उस नोड के साथ दर्शाया गया है)। उच्च किनारों को पूरक नहीं किया जाता है, यह सुनिश्चित करने के लिए कि परिणामी बीडीडी प्रतिनिधित्व एक विहित रूप है। इस प्रतिनिधित्व में, बीडीडी के पास एक एकल पत्ती नोड है, नीचे दिए गए कारणों के लिए।

BDD का प्रतिनिधित्व करते समय पूरक किनारों का उपयोग करने के दो फायदे हैं:
 * एक BDD की उपेक्षा की गणना में लगातार समय लगता है
 * अंतरिक्ष उपयोग (यानी, आवश्यक मेमोरी) कम हो गया है

इस प्रतिनिधित्व में एक BDD का संदर्भ एक (संभवतः पूरक) किनारे है जो BDD की जड़ की ओर इशारा करता है। यह पूरक किनारों के उपयोग के बिना प्रतिनिधित्व में एक बीडीडी के संदर्भ के विपरीत है, जो बीडीडी का रूट नोड है। इस प्रतिनिधित्व में एक संदर्भ का कारण यह है कि एक बढ़त होने की आवश्यकता है कि प्रत्येक बूलियन फ़ंक्शन के लिए, फ़ंक्शन और इसके नकारात्मकता को एक BDD की जड़ में एक किनारे द्वारा दर्शाया जाता है, और एक ही BDD की जड़ में एक पूरक किनारे। यही कारण है कि नकारात्मकता में लगातार समय लगता है। यह भी बताता है कि एक एकल पत्ती नोड क्यों होता है: झूठे को एक पूरक किनारे द्वारा दर्शाया जाता है जो पत्ती नोड को इंगित करता है, और सच को एक साधारण किनारे (यानी, पूरक नहीं) द्वारा दर्शाया जाता है जो पत्ती नोड को इंगित करता है।

उदाहरण के लिए, मान लें कि एक बूलियन फ़ंक्शन को पूरक किनारों का उपयोग करके एक BDD का प्रतिनिधित्व किया जाता है। चर के लिए (बूलियन) मानों के दिए गए असाइनमेंट के लिए बूलियन फ़ंक्शन के मान को खोजने के लिए, हम संदर्भ किनारे पर शुरू करते हैं, जो बीडीडी की जड़ की ओर इशारा करता है, और दिए गए चर मानों द्वारा परिभाषित पथ का पालन करें (निम्नलिखित ए के बाद कम धार यदि एक नोड लेबल करने वाला चर गलत है, और उच्च किनारे का अनुसरण करता है यदि चर जो एक नोड को लेबल करता है, तब तक सही होता है), जब तक कि हम पत्ती नोड तक नहीं पहुंचते। इस पथ का अनुसरण करते हुए, हम गिनते हैं कि हमने कितने पूरक किनारों को पार किया है। यदि हम पत्ती नोड तक पहुंचते हैं तो हमने एक विषम संख्या को पूरक किनारों को पार कर लिया है, तो दिए गए चर असाइनमेंट के लिए बूलियन फ़ंक्शन का मान गलत है, अन्यथा (यदि हमने पूरक किनारों की एक समान संख्या को पार कर लिया है), तो मान का मान दिए गए चर असाइनमेंट के लिए बूलियन फ़ंक्शन सत्य है।

इस प्रतिनिधित्व में एक BDD का एक उदाहरण आरेख दाईं ओर दिखाया गया है, और उसी बूलियन अभिव्यक्ति का प्रतिनिधित्व करता है जैसा कि ऊपर आरेखों में दिखाया गया है, अर्थात, $$(\neg x_1 \wedge \neg x_2 \wedge \neg x_3) \vee (x_1 \wedge x_2) \vee (x_2 \wedge x_3)$$।कम किनारों को धराशायी किया जाता है, उच्च किनारों को ठोस और पूरक किनारों को -1 लेबल द्वारा दर्शाया जाता है।नोड जिसका लेबल एक @ प्रतीक के साथ शुरू होता है, बीडीडी के संदर्भ का प्रतिनिधित्व करता है, यानी, संदर्भ किनारे वह किनारे है जो इस नोड से शुरू होता है।

इतिहास
मूल विचार जिसमें से डेटा संरचना बनाई गई थी, शैनन विस्तार है।एक स्विचिंग फ़ंक्शन को एक चर (cf. if-shen-else सामान्य रूप) असाइन करके दो उप-कार्यों (cofactors) में विभाजित किया जाता है।यदि इस तरह के उप-कार्य को उप-पेड़ माना जाता है, तो इसे एक बाइनरी निर्णय पेड़ द्वारा दर्शाया जा सकता है।बाइनरी निर्णय आरेख (BDDs) सी। वाई। ली द्वारा पेश किए गए थे, और आगे अध्ययन किया और शेल्डन बी। अकर्स द्वारा जाना जाता है और रेमंड टी। बाउट। इन लेखकों के स्वतंत्र रूप से, कैनोनिकल ब्रैकेट फॉर्म के नाम से एक बीडीडी को यूयू का एहसास हुआ था।स्पीड-इंडिपेंडेंट सर्किट के विश्लेषण के लिए एक सीएडी में वी। माम्रुकोव। डेटा संरचना के आधार पर कुशल एल्गोरिदम के लिए पूरी क्षमता की जांच कार्नेगी मेलन विश्वविद्यालय में रैंडल ब्रायंट द्वारा की गई थी: उनके प्रमुख एक्सटेंशन एक निश्चित चर ऑर्डर (कैनोनिकल प्रतिनिधित्व के लिए) और साझा उप-ग्राफ (संपीड़न के लिए) का उपयोग करने के लिए थे।इन दो अवधारणाओं को लागू करने से सेट और संबंधों के प्रतिनिधित्व के लिए एक कुशल डेटा संरचना और एल्गोरिदम का परिणाम होता है। कई बीडीडी के लिए साझाकरण का विस्तार करके, यानी एक उप-ग्राफ का उपयोग कई बीडीडी द्वारा किया जाता है, डेटा संरचना साझा किए गए आदेशित बाइनरी निर्णय आरेख को परिभाषित किया गया है। बीडीडी की धारणा अब आम तौर पर उस विशेष डेटा संरचना को संदर्भित करने के लिए उपयोग की जाती है।

बाइनरी निर्णय आरेखों (BDDs) के साथ अपने वीडियो व्याख्यान में, डोनाल्ड नूथ बीडीडी को केवल वास्तव में मौलिक डेटा संरचनाओं में से एक कहता है जो पिछले पच्चीस वर्षों में सामने आया था और उल्लेख किया है कि ब्रायंट का 1986 का पेपर कुछ समय के लिए कंप्यूटर विज्ञान में सबसे अधिक उद्धृत पत्रों में से एक था।

अदनान डार्विच और उनके सहयोगियों ने दिखाया है कि BDDs बूलियन कार्यों के लिए कई सामान्य रूपों में से एक हैं, प्रत्येक आवश्यकताओं के एक अलग संयोजन से प्रेरित है।Darwiche द्वारा पहचानी गई एक और महत्वपूर्ण सामान्य रूप डीकंपोज़ेबल नेगेशन नॉर्मल फॉर्म या DNNF है।

अनुप्रयोग
बीडीडी को सीएडी सॉफ्टवेयर में बड़े पैमाने पर उपयोग किया जाता है ताकि सर्किट (लॉजिक सिंथेसिस) और औपचारिक सत्यापन में संश्लेषित किया जा सके।BDD के कई कम ज्ञात अनुप्रयोग हैं, जिनमें फॉल्ट ट्री एनालिसिस, बायेसियन रीजनिंग, प्रोडक्ट कॉन्फ़िगरेशन और निजी सूचना पुनर्प्राप्ति शामिल हैं। प्रत्येक मनमाना BDD (भले ही यह कम या आदेश नहीं दिया गया हो) को सीधे हार्डवेयर में 2 से 1 मल्टीप्लेक्स के साथ प्रत्येक नोड को बदलकर लागू किया जा सकता है;प्रत्येक मल्टीप्लेक्स को सीधे एक FPGA में 4-lut द्वारा लागू किया जा सकता है।लॉजिक गेट्स के एक मनमाना नेटवर्क से बीडीडी में परिवर्तित करना इतना सरल नहीं है (और इनवर्टर ग्राफ के विपरीत)।

चर आदेश
BDD का आकार फ़ंक्शन का प्रतिनिधित्व किया जा रहा है और चर के चुने हुए क्रम द्वारा निर्धारित किया जाता है।वहाँ बूलियन कार्य मौजूद हैं $$f(x_1,\ldots, x_{n})$$ जिसके लिए चर के आदेश के आधार पर हम एक ग्राफ प्राप्त कर रहे हैं, जिसकी संख्या नोड्स की संख्या रैखिक होगी (सबसे अच्छा और सबसे अच्छा और घातीय रूप से सबसे खराब (जैसे, एक तरंग कैरी एडडर)।बूलियन फ़ंक्शन पर विचार करें $$f(x_1,\ldots, x_{2n}) = x_1x_2 + x_3x_4 + \cdots + x_{2n-1}x_{2n}.$$ चर आदेश का उपयोग करना $$x_1 < x_3 < \cdots < x_{2n-1} < x_2 < x_4 < \cdots < x_{2n}$$, BDD की जरूरत है $$2^{n+1}$$ फ़ंक्शन का प्रतिनिधित्व करने के लिए नोड्स।आदेश का उपयोग करना $$x_1 < x_2 < x_3 < x_4 < \cdots < x_{2n-1} < x_{2n}$$, BDD में शामिल हैं $$2n+2$$ नोड्स।

व्यवहार में इस डेटा संरचना को लागू करते समय चर आदेश के बारे में देखभाल करना महत्वपूर्ण महत्व है।सबसे अच्छा चर आदेश खोजने की समस्या एनपी-हार्ड है। किसी भी निरंतर c & nbsp; & nbsp; 1 के लिए यह एक चर ऑर्डर की गणना करने के लिए एनपी-हार्ड भी है, जिसके परिणामस्वरूप एक आकार के साथ एक OBDD होता है जो कि एक इष्टतम से अधिक सी गुना अधिक होता है। हालांकि, समस्या से निपटने के लिए कुशल हेयूरिस्टिक्स मौजूद हैं।

ऐसे कार्य हैं जिनके लिए ग्राफ का आकार हमेशा घातीय होता है - चर आदेश के स्वतंत्र।यह उदा।गुणन फ़ंक्शन के लिए। वास्तव में, फ़ंक्शन दो के उत्पाद के मध्य बिट की गणना करता है $$n$$-बिट संख्याओं में एक obdd की तुलना में छोटा नहीं है $$2^{\lfloor n/2 \rfloor} / 61 - 4$$ कोने। (यदि गुणन फ़ंक्शन में बहुपद-आकार के OBDDs थे, तो यह दिखाएगा कि पूर्णांक कारक p/poly में है, जो सच नहीं है। शोधकर्ताओं ने बीएमडी (बाइनरी मोमेंट आरेख), जेडडीडी (शून्य-दमनकारी निर्णय आरेख), एफडीडी (मुक्त द्विआधारी निर्णय आरेख), पीडीडी (समता निर्णय आरेख) जैसे कई संबंधित रेखांकन, जैसे कई संबंधित रेखांकन के लिए बीडीडी डेटा संरचना पर शोधन का सुझाव दिया है।, और MTBDDS (कई टर्मिनल BDDs)।

BDDS पर तार्किक संचालन
BDDs पर कई तार्किक संचालन को बहुपद-समय ग्राफ हेरफेर एल्गोरिदम द्वारा लागू किया जा सकता है:
 * संयोजक
 * असंतुष्ट
 * उपेक्षा

हालांकि, इन कार्यों को कई बार दोहराते हुए, उदाहरण के लिए, BDDs के एक सेट के संयोजन या विघटन का निर्माण, सबसे खराब स्थिति में सबसे बड़े BDD के परिणामस्वरूप हो सकता है।इसका कारण यह है कि दो बीडीडी के लिए पूर्ववर्ती संचालन में से कोई भी बीडीडी के आकार के साथ बीडीडी के आकार के उत्पाद के लिए आनुपातिक हो सकता है, और परिणामस्वरूप कई बीडीडी के लिए आकार संचालन की संख्या में घातीय हो सकता है।परिवर्तनीय आदेश को दूर करने की आवश्यकता है;बीडीडी के सेट के लिए (कुछ) के लिए एक अच्छा आदेश क्या हो सकता है, ऑपरेशन के परिणाम के लिए एक अच्छा आदेश नहीं हो सकता है।इसके अलावा, एक बूलियन फ़ंक्शन के BDD का निर्माण करने से NP- पूर्ण बूलियन संतोषजनक समस्या और CO-NP- पूर्ण टॉटोलॉजी समस्या का समाधान होता है, BDD का निर्माण करने से बूलियन फॉर्मूला के आकार में घातीय समय लग सकता है, जिसके परिणामस्वरूप BDD छोटा होता है।

कम BDDs के कई चर पर अस्तित्व संबंधी अमूर्तता की गणना एनपी-पूर्ण है।

मॉडल-गिनती, एक बूलियन फॉर्मूला के संतोषजनक असाइनमेंट की संख्या की गिनती, बीडीडी के लिए बहुपद समय में किया जा सकता है।सामान्य प्रस्ताव के सूत्रों के लिए समस्या isp-c-पूर्ण है और सबसे अच्छे ज्ञात एल्गोरिदम को सबसे खराब स्थिति में एक घातीय समय की आवश्यकता होती है।

यह भी देखें

 * बूलियन संतोषजनक समस्या, कैनोनिकल एनपी-पूर्ण कम्प्यूटेशनल समस्या
 * एल/पॉली, एक जटिलता वर्ग जिसमें सख्ती से बहुपद आकार के बीडीडी के साथ समस्याओं का सेट होता है
 * मॉडल जाँच
 * रेडिक्स ट्री
 * नेकां (जटिलता)#बैरिंगटन का प्रमेय | बैरिंगटन का प्रमेय
 * हार्डवेयर एक्सिलरेशन
 * कर्णघ मैप, बूलियन बीजगणित अभिव्यक्तियों को सरल बनाने की एक विधि

अग्रिम पठन

 * R. Ubar, "Test Generation for Digital Circuits Using Alternative Graphs (in Russian)", in Proc. Tallinn Technical University, 1976, No. 409, Tallinn Technical University, Tallinn, Estonia, pp. 75–81.
 * D. E. Knuth, "The Art of Computer Programming Volume 4, Fascicle 1: Bitwise tricks & techniques; Binary Decision Diagrams" (Addison–Wesley Professional, March 27, 2009) viii+260pp, ISBN 0-321-58050-8. Draft of Fascicle 1b available for download.
 * Ch. Meinel, T. Theobald, "Algorithms and Data Structures in VLSI-Design: OBDD – Foundations and Applications", Springer-Verlag, Berlin, Heidelberg, New York, 1998. Complete textbook available for download.

बाहरी संबंध

 * Fun With Binary Decision Diagrams (BDDs), lecture by Donald Knuth
 * List of BDD software libraries for several programming languages.