मल्टीवे ब्रांच: Difference between revisions
No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
'''मल्टीवे ब्रांच''' चयनित क्राइटेरिया से मैच होने वाले मान के आधार पर प्रोग्राम के कण्ट्रोल फ्लो में परिवर्तन है। यह [[ सशर्त (प्रोग्रामिंग) |कंडीशनल (प्रोग्रामिंग) स्टेटमेंट]] का रूप है। मल्टीवे ब्रांच प्रायः प्रोग्राम [[लेबल (कंप्यूटर विज्ञान)]] के | '''मल्टीवे ब्रांच''' चयनित क्राइटेरिया से मैच होने वाले मान के आधार पर प्रोग्राम के कण्ट्रोल फ्लो में परिवर्तन है। यह [[ सशर्त (प्रोग्रामिंग) |कंडीशनल (प्रोग्रामिंग) स्टेटमेंट]] का रूप है। मल्टीवे ब्रांच प्रायः प्रोग्राम [[लेबल (कंप्यूटर विज्ञान)]] के सेट में से कण्ट्रोल पासिंग करने की सबसे उत्तम [[एल्गोरिथम दक्षता]] विधि होती है, प्रायः यदि रॉ डेटा से ऐरे डेटा संरचना पहले से बनाई गई हो। | ||
==उदाहरण== | ==उदाहरण== | ||
Line 7: | Line 7: | ||
==विकल्प== | ==विकल्प== | ||
मल्टीवे ब्रांच को, प्रायः कुशल इंडेक्स्ड लुकअप टेबल के साथ प्रतिस्थापित किया जा सकता है (डेटा मान का उपयोग करके या किसी इंडेक्स के ऐरे के रूप में डेटा मान के परिकलित व्युत्पन्न का उपयोग करके)<ref>{{Cite web |url=http://ols.fedoraproject.org/GCC/Reprints-2008/sayle-reprint.pdf |title=संग्रहीत प्रति|access-date=2009-11-18 |archive-url=https://web.archive.org/web/20120227064827/http://ols.fedoraproject.org/GCC/Reprints-2008/sayle-reprint.pdf |archive-date=2012-02-27 |url-status=dead }}</ref> | मल्टीवे ब्रांच को, प्रायः कुशल इंडेक्स्ड लुकअप टेबल के साथ प्रतिस्थापित किया जा सकता है (डेटा मान का उपयोग करके या किसी इंडेक्स के ऐरे के रूप में डेटा मान के परिकलित व्युत्पन्न का उपयोग करके)।<ref>{{Cite web |url=http://ols.fedoraproject.org/GCC/Reprints-2008/sayle-reprint.pdf |title=संग्रहीत प्रति|access-date=2009-11-18 |archive-url=https://web.archive.org/web/20120227064827/http://ols.fedoraproject.org/GCC/Reprints-2008/sayle-reprint.pdf |archive-date=2012-02-27 |url-status=dead }}</ref> | ||
स्विच स्टेटमेंट के कार्यान्वयन को मल्टीवे ब्रांच के कार्यान्वयन के समान किया गया है। चूँकि, रियल कोड में स्विच स्टेटमेंट के कई उपयोगों के लिए, पूर्ण रूप से ब्रांचिंग से बचना और स्विच को अधिक टेबल लुक-अप के साथ परिवर्तित करना संभव है। उदाहरण के लिए, <code>Has30Days</code> उदाहरण [पहले प्रस्तुत] को निम्नलिखित के रूप में कार्यान्वित किया जा सकता है: [C उदाहरण]" | स्विच स्टेटमेंट के कार्यान्वयन को मल्टीवे ब्रांच के कार्यान्वयन के समान किया गया है। चूँकि, रियल कोड में स्विच स्टेटमेंट के कई उपयोगों के लिए, पूर्ण रूप से ब्रांचिंग से बचना और स्विच को अधिक टेबल लुक-अप के साथ परिवर्तित करना संभव है। उदाहरण के लिए, <code>Has30Days</code> उदाहरण [पहले प्रस्तुत] को निम्नलिखित के रूप में कार्यान्वित किया जा सकता है: [C उदाहरण]" | ||
Line 36: | Line 36: | ||
return T[x]; /* return with boolean 1 = true, 0=false */ | return T[x]; /* return with boolean 1 = true, 0=false */ | ||
</syntaxhighlight> | </syntaxhighlight> | ||
(पश्चात | (पश्चात वाली स्तिथि में सरलता को देखते हुए, इसे इन-लाइन प्रारम्भ करना उत्तम होगा, क्योंकि फ़ंक्शन कॉल का उपयोग करने का ओवरहेड इंडेक्स्ड लुकअप से अधिक हो सकता है।) | ||
==उद्धरण== | ==उद्धरण== | ||
{{quote|मल्टीवे ब्रांचिंग महत्वपूर्ण प्रोग्रामिंग तकनीक है जिसे प्रायः परीक्षणों के अकुशल इंडेक्स द्वारा प्रतिस्थापित किया जाता है। [[पीटर नौर]] ने वर्तमान में मुझे लिखा था कि वह प्रोग्राम फ्लो को कण्ट्रोल करने के लिए टेबल के उपयोग को कंप्यूटर विज्ञान का मूल विचार मानते हैं जिसे लगभग भुला दिया गया है; किन्तु उन्हें आशा है कि यह अब किसी भी दिन पुनः परीक्षण के लिए तैयार होगा। मेरे द्वारा अध्ययन किए गए सभी उत्तम कंपाइलरों में यह दक्षता | {{quote|मल्टीवे ब्रांचिंग महत्वपूर्ण प्रोग्रामिंग तकनीक है जिसे प्रायः परीक्षणों के अकुशल इंडेक्स द्वारा प्रतिस्थापित किया जाता है। [[पीटर नौर]] ने वर्तमान में मुझे लिखा था कि वह प्रोग्राम फ्लो को कण्ट्रोल करने के लिए टेबल के उपयोग को कंप्यूटर विज्ञान का मूल विचार मानते हैं जिसे लगभग भुला दिया गया है; किन्तु उन्हें आशा है कि यह अब किसी भी दिन पुनः परीक्षण के लिए तैयार होगा। मेरे द्वारा अध्ययन किए गए सभी उत्तम कंपाइलरों में यह दक्षता की है। | ||
|[[डोनाल्ड नुथ]]|''गोटो स्टेटमेंट के साथ स्ट्रक्चर्ड प्रोग्रामिंग''}} | |[[डोनाल्ड नुथ]]|''गोटो स्टेटमेंट के साथ स्ट्रक्चर्ड प्रोग्रामिंग''}} | ||
Revision as of 19:10, 5 August 2023
मल्टीवे ब्रांच चयनित क्राइटेरिया से मैच होने वाले मान के आधार पर प्रोग्राम के कण्ट्रोल फ्लो में परिवर्तन है। यह कंडीशनल (प्रोग्रामिंग) स्टेटमेंट का रूप है। मल्टीवे ब्रांच प्रायः प्रोग्राम लेबल (कंप्यूटर विज्ञान) के सेट में से कण्ट्रोल पासिंग करने की सबसे उत्तम एल्गोरिथम दक्षता विधि होती है, प्रायः यदि रॉ डेटा से ऐरे डेटा संरचना पहले से बनाई गई हो।
उदाहरण
- ब्रांच टेबल
- स्विच स्टेटमेंट- नीचे विकल्प भी देखें।
- मल्टीप्ल डिस्पैच- जहां सबरूटीन प्रारम्भ किया जाता है और रिटर्न किया जाता है।
विकल्प
मल्टीवे ब्रांच को, प्रायः कुशल इंडेक्स्ड लुकअप टेबल के साथ प्रतिस्थापित किया जा सकता है (डेटा मान का उपयोग करके या किसी इंडेक्स के ऐरे के रूप में डेटा मान के परिकलित व्युत्पन्न का उपयोग करके)।[1]
स्विच स्टेटमेंट के कार्यान्वयन को मल्टीवे ब्रांच के कार्यान्वयन के समान किया गया है। चूँकि, रियल कोड में स्विच स्टेटमेंट के कई उपयोगों के लिए, पूर्ण रूप से ब्रांचिंग से बचना और स्विच को अधिक टेबल लुक-अप के साथ परिवर्तित करना संभव है। उदाहरण के लिए, Has30Days
उदाहरण [पहले प्रस्तुत] को निम्नलिखित के रूप में कार्यान्वित किया जा सकता है: [C उदाहरण]"
रोजर एंथोनी सैले द्वारा मल्टीवे ब्रांच कोड जनरेशन का सुपरऑप्टिमाइज़र विश्लेषण है।
switch (x) { /* x is month no */
case 4: /* April */
case 6: /* June */
case 9: /* September */
case 11: /* November */
return true;
}
सेफ-हैशिंग तकनीक का उपयोग करके, प्रतिस्थापित किया जा सकता है-
unsigned int t = x | 2;
switch (t) {
case 6:
case 11:
return true;
}
या इसे इंडेक्स मैपिंग टेबल लुकअप का उपयोग करके परिवर्तित जा सकता है-
x %= 12; /* to ensure x is in range 0-11*/
static const int T[12] ={0,0,0,0,1,0,1,0,0,1,0,1}; /* 0-based table 'if 30 days =1,else 0' */
return T[x]; /* return with boolean 1 = true, 0=false */
(पश्चात वाली स्तिथि में सरलता को देखते हुए, इसे इन-लाइन प्रारम्भ करना उत्तम होगा, क्योंकि फ़ंक्शन कॉल का उपयोग करने का ओवरहेड इंडेक्स्ड लुकअप से अधिक हो सकता है।)
उद्धरण
मल्टीवे ब्रांचिंग महत्वपूर्ण प्रोग्रामिंग तकनीक है जिसे प्रायः परीक्षणों के अकुशल इंडेक्स द्वारा प्रतिस्थापित किया जाता है। पीटर नौर ने वर्तमान में मुझे लिखा था कि वह प्रोग्राम फ्लो को कण्ट्रोल करने के लिए टेबल के उपयोग को कंप्यूटर विज्ञान का मूल विचार मानते हैं जिसे लगभग भुला दिया गया है; किन्तु उन्हें आशा है कि यह अब किसी भी दिन पुनः परीक्षण के लिए तैयार होगा। मेरे द्वारा अध्ययन किए गए सभी उत्तम कंपाइलरों में यह दक्षता की है।
— डोनाल्ड नुथ, गोटो स्टेटमेंट के साथ स्ट्रक्चर्ड प्रोग्रामिंग
यह भी देखें
- कंडीशनल (प्रोग्रामिंग)
- लुकउप टेबल
संदर्भ
- ↑ "संग्रहीत प्रति" (PDF). Archived from the original (PDF) on 2012-02-27. Retrieved 2009-11-18.
बाहरी संबंध
- Coding Multiway Branches Using Customized Hash functions by H. G. Dietz
- Learning Python By Mark Lutz
- Programming in C++ By Nell B. Dale, Chip Weems
- A Superoptimizer Analysis of Multiway Branch Code Generation by Roger Anthony Sayle