मल्टीवे ब्रांच: Difference between revisions
(Created page with "मल्टीवे शाखा एक चयनित मानदंड से मेल खाने वाले मूल्य के आधार पर प्रो...") |
m (11 revisions imported from alpha:मल्टीवे_ब्रांच) |
||
(10 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
मल्टीवे | '''मल्टीवे ब्रांच''' चयनित क्राइटेरिया से मैच होने वाले वैल्यू के आधार पर प्रोग्राम के कण्ट्रोल फ्लो में परिवर्तन है। यह [[ सशर्त (प्रोग्रामिंग) |कंडीशनल (प्रोग्रामिंग) स्टेटमेंट]] का रूप है। मल्टीवे ब्रांच प्रायः प्रोग्राम [[लेबल (कंप्यूटर विज्ञान)]] के सेट में से कण्ट्रोल पासिंग करने की सबसे उत्तम [[एल्गोरिथम दक्षता]] विधि होती है, प्रायः यदि रॉ डेटा से ऐरे डेटा संरचना पहले से बनाई गई हो। | ||
==उदाहरण== | ==उदाहरण== | ||
* [[शाखा तालिका]] | * [[शाखा तालिका|ब्रांच टेबल]] | ||
* [[ कथन बदलें ]] - नीचे विकल्प भी | * [[ कथन बदलें |स्विच स्टेटमेंट]]- नीचे विकल्प भी देखें। | ||
* [[ एकाधिक प्रेषण ]] - जहां | * [[ एकाधिक प्रेषण |मल्टीप्ल डिस्पैच]]- जहां सबरूटीन प्रारम्भ किया जाता है और रिटर्न किया जाता है। | ||
==विकल्प== | ==विकल्प== | ||
मल्टीवे ब्रांच को, प्रायः कुशल इंडेक्स्ड लुकअप टेबल के साथ प्रतिस्थापित किया जा सकता है (डेटा वैल्यू का उपयोग करके या किसी इंडेक्स के ऐरे के रूप में डेटा वैल्यू के परिकलित व्युत्पन्न का उपयोग करके)।<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 उदाहरण]" | |||
रोजर एंथोनी सैले द्वारा [https://web.archive.org/web/20120227064827/http://ols.fedoraproject.org/GCC/Reprints-2008/sayle-reprint.pdf मल्टीवे ब्रांच कोड जनरेशन का सुपरऑप्टिमाइज़र विश्लेषण] है। | |||
<syntaxhighlight lang="c"> | <syntaxhighlight lang="c"> | ||
switch (x) { /* x is month no */ | switch (x) { /* x is month no */ | ||
Line 18: | Line 21: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
सेफ-हैशिंग टेक्निक का उपयोग करके, प्रतिस्थापित किया जा सकता है- | |||
<syntaxhighlight lang="c"> | <syntaxhighlight lang="c"> | ||
unsigned int t = x | 2; | unsigned int t = x | 2; | ||
Line 27: | Line 30: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
या इसे [[ सूचकांक मानचित्रण ]] टेबल लुकअप का उपयोग करके | या इसे [[ सूचकांक मानचित्रण |इंडेक्स मैपिंग]] टेबल लुकअप का उपयोग करके परिवर्तित जा सकता है- | ||
<syntaxhighlight lang="c"> | <syntaxhighlight lang="c"> | ||
x %= 12; /* to ensure x is in range 0-11*/ | x %= 12; /* to ensure x is in range 0-11*/ | ||
Line 33: | 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|मल्टीवे ब्रांचिंग महत्वपूर्ण प्रोग्रामिंग टेक्निक है जिसे प्रायः परीक्षणों के अकुशल इंडेक्स द्वारा प्रतिस्थापित किया जाता है। [[पीटर नौर]] ने वर्तमान में मुझे लिखा था कि वह प्रोग्राम फ्लो को कण्ट्रोल करने के लिए टेबल के उपयोग को कंप्यूटर विज्ञान का मूल विचार मानते हैं जिसे लगभग भुला दिया गया है; किन्तु उन्हें आशा है कि यह अब किसी भी दिन पुनः परीक्षण के लिए तैयार होगा। मेरे द्वारा अध्ययन किए गए सभी उत्तम कंपाइलरों में यह दक्षता की है। | ||
|[[डोनाल्ड नुथ]]|''गोटो स्टेटमेंट के साथ स्ट्रक्चर्ड प्रोग्रामिंग''}} | |||
==यह भी देखें== | ==यह भी देखें== | ||
* | *कंडीशनल (प्रोग्रामिंग) | ||
* | *लुकउप टेबल | ||
==संदर्भ== | == संदर्भ == | ||
{{Reflist}} | {{Reflist}} | ||
== बाहरी संबंध == | |||
==बाहरी संबंध== | |||
*[https://docs.lib.purdue.edu/cgi/viewcontent.cgi?article=1312&context=ecetr Coding Multiway Branches Using Customized Hash functions] by H. G. Dietz | *[https://docs.lib.purdue.edu/cgi/viewcontent.cgi?article=1312&context=ecetr Coding Multiway Branches Using Customized Hash functions] by H. G. Dietz | ||
*[https://books.google.com/books?id=nEJ-jcYF2fMC&pg=PA238 Learning Python] By Mark Lutz | *[https://books.google.com/books?id=nEJ-jcYF2fMC&pg=PA238 Learning Python] By Mark Lutz | ||
Line 57: | Line 60: | ||
[[Category: Machine Translated Page]] | [[Category: Machine Translated Page]] | ||
[[Category:Created On 25/07/2023]] | [[Category:Created On 25/07/2023]] | ||
[[Category:Vigyan Ready]] |
Latest revision as of 22:28, 2 February 2024
मल्टीवे ब्रांच चयनित क्राइटेरिया से मैच होने वाले वैल्यू के आधार पर प्रोग्राम के कण्ट्रोल फ्लो में परिवर्तन है। यह कंडीशनल (प्रोग्रामिंग) स्टेटमेंट का रूप है। मल्टीवे ब्रांच प्रायः प्रोग्राम लेबल (कंप्यूटर विज्ञान) के सेट में से कण्ट्रोल पासिंग करने की सबसे उत्तम एल्गोरिथम दक्षता विधि होती है, प्रायः यदि रॉ डेटा से ऐरे डेटा संरचना पहले से बनाई गई हो।
उदाहरण
- ब्रांच टेबल
- स्विच स्टेटमेंट- नीचे विकल्प भी देखें।
- मल्टीप्ल डिस्पैच- जहां सबरूटीन प्रारम्भ किया जाता है और रिटर्न किया जाता है।
विकल्प
मल्टीवे ब्रांच को, प्रायः कुशल इंडेक्स्ड लुकअप टेबल के साथ प्रतिस्थापित किया जा सकता है (डेटा वैल्यू का उपयोग करके या किसी इंडेक्स के ऐरे के रूप में डेटा वैल्यू के परिकलित व्युत्पन्न का उपयोग करके)।[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