मल्टीवे ब्रांच: Difference between revisions
m (Deepak moved page मल्टीवे शाखा to मल्टीवे ब्रांच without leaving a redirect) |
No edit summary |
||
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 45: | Line 46: | ||
{{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 |
Revision as of 23:39, 4 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 */
(बाद वाले मामले की सरलता को देखते हुए, इसे इन-लाइन लागू करना बेहतर होगा, क्योंकि फ़ंक्शन कॉल का उपयोग करने का ओवरहेड अनुक्रमित लुकअप से अधिक हो सकता है।)
उद्धरण
Multiway branching is an important programming technique which is all too often replaced by an inefficient sequence of if tests. Peter Naur recently wrote me that he considers the use of tables to control program flow as a basic idea of computer science that has been nearly forgotten; but he expects it will be ripe for rediscovery any day now. It is the key to efficiency in all the best compilers I have studied.
— Donald Knuth, Structured Programming with go to Statements
यह भी देखें
- सशर्त (प्रोग्रामिंग)
- तालिका देखो
संदर्भ
- ↑ "संग्रहीत प्रति" (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