मल्टीवे ब्रांच: Difference between revisions

From Vigyanwiki
No edit summary
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>
मल्टीवे ब्रांच को, प्रायः कुशल इंडेक्स्ड लुकअप टेबल के साथ प्रतिस्थापित किया जा सकता है (डेटा मान का उपयोग करके या किसी इंडेक्स के ऐरे के रूप में डेटा मान के परिकलित व्युत्पन्न का उपयोग करके)<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 मल्टीवे ब्रांच कोड जनरेशन का सुपरऑप्टिमाइज़र विश्लेषण] रोजर एंथोनी सैले द्वारा
स्विच स्टेटमेंट के कार्यान्वयन को मल्टीवे ब्रांच के कार्यान्वयन के समान किया गया है। चूँकि, रियल कोड में स्विच स्टेटमेंट के कई उपयोगों के लिए, पूर्ण रूप से ब्रांचिंग से बचना और स्विच को अधिक टेबल लुक-अप के साथ परिवर्तित करना संभव है। उदाहरण के लिए, <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 19: Line 21:
  }
  }
</syntaxhighlight>
</syntaxhighlight>
सुरक्षित-हैशिंग तकनीक का उपयोग करके, प्रतिस्थापित किया जा सकता है -
सेफ-हैशिंग तकनीक का उपयोग करके, प्रतिस्थापित किया जा सकता है-
<syntaxhighlight lang="c">
<syntaxhighlight lang="c">
  unsigned int t = x | 2;
  unsigned int t = x | 2;
Line 28: 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 34: 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|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''}}
{{quote|मल्टीवे ब्रांचिंग महत्वपूर्ण प्रोग्रामिंग तकनीक है जिसे प्रायः परीक्षणों के अकुशल इंडेक्स द्वारा प्रतिस्थापित किया जाता है। [[पीटर नौर]] ने वर्तमान में मुझे लिखा था कि वह प्रोग्राम फ्लो को कण्ट्रोल करने के लिए टेबल के उपयोग को कंप्यूटर विज्ञान का मूल विचार मानते हैं जिसे लगभग भुला दिया गया है; किन्तु उन्हें आशा है कि यह अब किसी भी दिन पुनः परीक्षण के लिए तैयार होगा। मेरे द्वारा अध्ययन किए गए सभी उत्तम कंपाइलरों में यह दक्षता की की है।
|[[डोनाल्ड नुथ]]|''गोटो स्टेटमेंट के साथ स्ट्रक्चर्ड प्रोग्रामिंग''}}


==यह भी देखें==
==यह भी देखें==
*सशर्त (प्रोग्रामिंग)
*कंडीशनल (प्रोग्रामिंग)
*तालिका देखो
*लुकउप टेबल


==संदर्भ==
== संदर्भ ==
{{Reflist}}
{{Reflist}}



Revision as of 19:03, 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 */

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

उद्धरण

मल्टीवे ब्रांचिंग महत्वपूर्ण प्रोग्रामिंग तकनीक है जिसे प्रायः परीक्षणों के अकुशल इंडेक्स द्वारा प्रतिस्थापित किया जाता है। पीटर नौर ने वर्तमान में मुझे लिखा था कि वह प्रोग्राम फ्लो को कण्ट्रोल करने के लिए टेबल के उपयोग को कंप्यूटर विज्ञान का मूल विचार मानते हैं जिसे लगभग भुला दिया गया है; किन्तु उन्हें आशा है कि यह अब किसी भी दिन पुनः परीक्षण के लिए तैयार होगा। मेरे द्वारा अध्ययन किए गए सभी उत्तम कंपाइलरों में यह दक्षता की की है।

— डोनाल्ड नुथ, गोटो स्टेटमेंट के साथ स्ट्रक्चर्ड प्रोग्रामिंग

यह भी देखें

  • कंडीशनल (प्रोग्रामिंग)
  • लुकउप टेबल

संदर्भ

  1. "संग्रहीत प्रति" (PDF). Archived from the original (PDF) on 2012-02-27. Retrieved 2009-11-18.

बाहरी संबंध