सेंटीनल वैल्यू: Difference between revisions
(Created page with "{{distinguish|sentinel node|canary value}} कंप्यूटर प्रोग्रामिंग में, एक सेंटीनल वैल्यू (जि...") |
No edit summary |
||
Line 1: | Line 1: | ||
{{distinguish| | {{distinguish|प्रहरी नोड|कैनरी मूल्य}} | ||
[[कंप्यूटर प्रोग्रामिंग]] में, एक सेंटीनल वैल्यू (जिसे फ्लैग वैल्यू, ट्रिप वैल्यू, रॉग वैल्यू, सिग्नल वैल्यू या डमी डेटा भी कहा जाता है)<ref> | [[कंप्यूटर प्रोग्रामिंग]] में, एक सेंटीनल वैल्यू (जिसे फ्लैग वैल्यू, ट्रिप वैल्यू, रॉग वैल्यू, सिग्नल वैल्यू या डमी डेटा भी कहा जाता है)<ref> | ||
{{cite book | {{cite book | ||
Line 13: | Line 13: | ||
| url = https://archive.org/details/artofcomputerpro02dona/page/213 | | url = https://archive.org/details/artofcomputerpro02dona/page/213 | ||
| url-access = registration | | url-access = registration | ||
}}</ref> एक [[कलन विधि]] के संदर्भ में एक विशेष [[मूल्य (कंप्यूटर विज्ञान)]] है जो समाप्ति की स्थिति के रूप में अपनी उपस्थिति का उपयोग करता है, | }}</ref> एक [[कलन विधि]] के संदर्भ में एक विशेष [[मूल्य (कंप्यूटर विज्ञान)]] है जो समाप्ति की स्थिति के रूप में अपनी उपस्थिति का उपयोग करता है, सामान्यतः नियंत्रण प्रवाह या पुनरावर्ती एल्गोरिदम में। | ||
प्रहरी मान [[इन-बैंड]] डेटा का एक रूप है जो डेटा के अंत का पता लगाना संभव बनाता है जब कोई [[आउट-ऑफ-बैंड डेटा]] (जैसे एक स्पष्ट आकार संकेत) प्रदान नहीं किया जाता है। मूल्य को इस तरह से चुना जाना चाहिए कि यह सभी | प्रहरी मान [[इन-बैंड]] डेटा का एक रूप है जो डेटा के अंत का पता लगाना संभव बनाता है जब कोई [[आउट-ऑफ-बैंड डेटा]] (जैसे एक स्पष्ट आकार संकेत) प्रदान नहीं किया जाता है। मूल्य को इस तरह से चुना जाना चाहिए कि यह सभी नियमबद्ध डेटा मूल्यों से अलग होने की गारंटी है अन्यथा, ऐसे मूल्यों की उपस्थिति समय से पहले डेटा के अंत का संकेत देगी (सेमीप्रिडिकेट समस्या)। एक प्रहरी मान को कभी-कभी काहिरा में एक हाथी के रूप में जाना जाता है, एक मजाक के कारण जहां इसका उपयोग भौतिक प्रहरी के रूप में किया जाता है। सुरक्षित भाषाओं में, अधिकांश प्रहरी मूल्यों को [[विकल्प प्रकार]]ों से बदला जा सकता है, जो असाधारण स्थितियों की स्पष्ट हैंडलिंग को प्रयुक्त करते हैं। | ||
== उदाहरण == | == उदाहरण == | ||
Line 21: | Line 21: | ||
* अशक्त वर्ण एक [[अशक्त-समाप्त स्ट्रिंग]] के अंत को इंगित करने के लिए | * अशक्त वर्ण एक [[अशक्त-समाप्त स्ट्रिंग]] के अंत को इंगित करने के लिए | ||
* लिंक की गई सूची या ट्री (डेटा संरचना) के अंत का संकेत देने के लिए अशक्त सूचक। | * लिंक की गई सूची या ट्री (डेटा संरचना) के अंत का संकेत देने के लिए अशक्त सूचक। | ||
* समान अंतराल वाले डेटा मानों की धारा में [[सबसे महत्वपूर्ण बिट]], उदाहरण के लिए, 8-बिट [[बाइट]]्स में संग्रहीत 7-बिट [[ASCII]] वर्णों की धारा में एक सेट 8 बिट एक विशेष संपत्ति का संकेत देता है (जैसे [[उलटा वीडियो]], [[बोल्ड अक्षरों]] या इटैलिक) या धारा का अंत | * समान अंतराल वाले डेटा मानों की धारा में [[सबसे महत्वपूर्ण बिट]], उदाहरण के लिए, 8-बिट [[बाइट]]्स में संग्रहीत 7-बिट [[ASCII|एएससीआईआई(ASCII)]] वर्णों की धारा में एक सेट 8 बिट एक विशेष संपत्ति का संकेत देता है (जैसे [[उलटा वीडियो]], [[बोल्ड अक्षरों]] या इटैलिक) या धारा का अंत | ||
* गैर-ऋणात्मक पूर्णांकों के अनुक्रम के अंत को इंगित करने के लिए एक ऋणात्मक पूर्णांक | * गैर-ऋणात्मक पूर्णांकों के अनुक्रम के अंत को इंगित करने के लिए एक ऋणात्मक पूर्णांक | ||
== वेरिएंट == | == वेरिएंट == | ||
थोड़ी अलग परिस्थितियों में उपयोग की जाने वाली एक संबंधित प्रथा, कुछ प्रोसेसिंग लूप में समाप्ति के लिए एक स्पष्ट परीक्षण की आवश्यकता से बचने के लिए, डेटा के अंत में कुछ विशिष्ट मूल्य रखना है, क्योंकि मान पहले से ही परीक्षणों द्वारा समाप्ति को ट्रिगर करेगा अन्य कारणों से उपस्थित हों। उपरोक्त उपयोगों के विपरीत, यह नहीं है कि डेटा को स्वाभाविक रूप से कैसे संग्रहीत या संसाधित किया जाता है, | थोड़ी अलग परिस्थितियों में उपयोग की जाने वाली एक संबंधित प्रथा, कुछ प्रोसेसिंग लूप में समाप्ति के लिए एक स्पष्ट परीक्षण की आवश्यकता से बचने के लिए, डेटा के अंत में कुछ विशिष्ट मूल्य रखना है, क्योंकि मान पहले से ही परीक्षणों द्वारा समाप्ति को ट्रिगर करेगा अन्य कारणों से उपस्थित हों। उपरोक्त उपयोगों के विपरीत, यह नहीं है कि डेटा को स्वाभाविक रूप से कैसे संग्रहीत या संसाधित किया जाता है, किंतु इसके अतिरिक्त एक अनुकूलन है, जो सीधे एल्गोरिथम की तुलना में समाप्ति की जांच करता है। यह सामान्यतः खोज में प्रयोग किया जाता है।<ref>{{cite book |last1=Mehlhorn |first1=Kurt |author1-link=Kurt Mehlhorn |last2=Sanders |first2=Peter |author2-link=Peter Sanders (computer scientist) |year=2008 |title=Algorithms and Data Structures: The Basic Toolbox 3 Representing Sequences by Arrays and Linked Lists |publisher=Springer |page=63 |url=http://people.mpi-inf.mpg.de/~mehlhorn/ftp/Toolbox/SortedSequences.pdf |isbn=978-3-540-77977-3}}</ref><ref>{{cite book |last=McConnell |first=Steve |year=2004 |title=Code Complete |edition=2nd |location=Redmond |publisher=Microsoft Press |isbn=0-7356-1967-0 |page=621 |url=https://archive.org/details/codecomplete0000mcco/page/621 |url-access=registration}}</ref> | ||
उदाहरण के लिए, किसी अवर्गीकृत सूची (अमूर्त डेटा प्रकार) में किसी विशेष मान की खोज करते समय, प्रत्येक तत्व की तुलना इस मान से की जाएगी, जब समानता पाए जाने [[आंतरिक फंदे]] समाप्त हो जाएगा; | |||
उदाहरण के लिए, किसी अवर्गीकृत सूची (अमूर्त डेटा प्रकार) में किसी विशेष मान की खोज करते समय, प्रत्येक तत्व की तुलना इस मान से की जाएगी, जब समानता पाए जाने [[आंतरिक फंदे]] समाप्त हो जाएगा; चूँकि, इस स्थिति से निपटने के लिए कि मूल्य अनुपस्थित होना चाहिए, प्रत्येक चरण के बाद खोज को असफल रूप से पूरा करने के लिए भी परीक्षण करना चाहिए। सूची के अंत में खोजे गए मान को जोड़कर, एक असफल खोज अब संभव नहीं है, और आंतरिक लूप में किसी स्पष्ट समाप्ति परीक्षण की आवश्यकता नहीं है; बाद में, किसी को अभी भी यह तय करना होगा कि क्या एक सही मैच पाया गया था, किंतु इस परीक्षण को प्रत्येक पुनरावृत्ति के अतिरिक्त केवल एक बार करने की आवश्यकता है।<ref>{{cite book |last=Knuth |first=Donald |authorlink=Donald Knuth |year=1973 |title=The Art of Computer Programming, Volume 3: Sorting and searching |publisher=[[Addison-Wesley]] |isbn=0-201-03803-X |page=395}}</ref> नुथ डेटा के अंत में रखे गए मान को प्रहरी के अतिरिक्त एक डमी मान कहता है। | |||
=== उदाहरण === | === उदाहरण === | ||
Line 33: | Line 34: | ||
उदाहरण के लिए, यदि सी में किसी सरणी में मान की खोज की जाती है, तो एक सीधा कार्यान्वयन इस प्रकार है; बिना किसी परिणाम के वापस आने की अर्धविराम समस्या को हल करने के लिए एक ऋणात्मक संख्या (अमान्य सूचकांक) के उपयोग पर ध्यान दें: | उदाहरण के लिए, यदि सी में किसी सरणी में मान की खोज की जाती है, तो एक सीधा कार्यान्वयन इस प्रकार है; बिना किसी परिणाम के वापस आने की अर्धविराम समस्या को हल करने के लिए एक ऋणात्मक संख्या (अमान्य सूचकांक) के उपयोग पर ध्यान दें: | ||
<वाक्यविन्यास लैंग = सी> | <वाक्यविन्यास लैंग = सी> | ||
int ढूंढें (int arr[], size_t len, int val) | int ढूंढें (int arr[], size_t len, int val) | ||
{ | { | ||
के लिए (int i = 0; i < len; i++) | के लिए (int i = 0; i < len; i++) | ||
यदि (आगमन [i] == वैल) | |||
वापसी मैं; | वापसी मैं; | ||
वापसी -1; // नहीं मिला | वापसी -1; // नहीं मिला | ||
} | } | ||
</वाक्यविन्यास हाइलाइट> | </वाक्यविन्यास हाइलाइट> | ||
चूँकि, यह लूप के प्रत्येक पुनरावृत्ति पर दो परीक्षण करता है: क्या मान मिल गया है और क्या सरणी का अंत हो गया है। यह बाद वाला परीक्षण है जिसे प्रहरी मान का उपयोग करके टाला जाता है। यह मानते हुए कि सरणी को एक तत्व द्वारा बढ़ाया जा सकता है (स्मृति आवंटन या सफाई के बिना; यह एक लिंक की गई सूची के लिए अधिक यथार्थवादी है, जैसा कि नीचे दिया गया है), इसे फिर से लिखा जा सकता है: | |||
<वाक्यविन्यास लैंग = सी> | <वाक्यविन्यास लैंग = सी> | ||
int ढूंढें (int arr[], size_t len, int val) | int ढूंढें (int arr[], size_t len, int val) | ||
{ | { | ||
int मैं; | int मैं; | ||
आगमन [लेन] = वैल; // प्रहरी मूल्य जोड़ें | आगमन [लेन] = वैल; // प्रहरी मूल्य जोड़ें | ||
के लिए (i = | के लिए (i = 00;; i++) | ||
यदि (आगमन [i] == वैल) | |||
तोड़ना; | तोड़ना; | ||
यदि (मैं <लेन) | |||
वापसी मैं; | वापसी मैं; | ||
अन्य | अन्य | ||
वापसी -1; // नहीं मिला | वापसी -1; // नहीं मिला | ||
} | } | ||
</वाक्यविन्यास हाइलाइट> | </वाक्यविन्यास हाइलाइट> | ||
के लिए परीक्षा <code>i < len</code> अभी भी | |||
के लिए परीक्षा <code>i < len</code> अभी भी उपस्थित है, किंतु इसे लूप के बाहर ले जाया गया है, जिसमें अब केवल एक परीक्षण (मान के लिए) है, और संतरी मूल्य के कारण समाप्त होने की गारंटी है। प्रहरी मान हिट होने पर समाप्ति पर एक ही जाँच होती है, जो प्रत्येक पुनरावृत्ति के लिए एक परीक्षण की जगह लेती है। | |||
सरणी के अंतिम तत्व को एक सेंटीनेल द्वारा अस्थायी रूप से प्रतिस्थापित करना और इसे संभालना भी संभव है, खासकर यदि यह पहुंच गया हो: | सरणी के अंतिम तत्व को एक सेंटीनेल द्वारा अस्थायी रूप से प्रतिस्थापित करना और इसे संभालना भी संभव है, खासकर यदि यह पहुंच गया हो: | ||
<वाक्यविन्यास लैंग = सी> | <वाक्यविन्यास लैंग = सी> | ||
int ढूंढें (int arr[], size_t len, int val) | int ढूंढें (int arr[], size_t len, int val) | ||
{ | { | ||
अंत में; | अंत में; | ||
यदि (लेन == 0) | |||
वापसी -1; | वापसी -1; | ||
अंतिम = आगमन [लेन - 1]; | अंतिम = आगमन [लेन - 1]; | ||
Line 72: | Line 85: | ||
int मैं; | int मैं; | ||
के लिए (i = | के लिए (i = 00;; i++) | ||
यदि (आगमन [i] == वैल) | |||
तोड़ना; | तोड़ना; | ||
आगमन [लेन - 1] = अंतिम; | आगमन [लेन - 1] = अंतिम; | ||
यदि (आगमन [i] == वैल) | |||
वापसी मैं; | वापसी मैं; | ||
वरना | वरना | ||
वापसी -1; // पता नहीं चला | वापसी -1; // पता नहीं चला | ||
} | } | ||
</वाक्यविन्यास हाइलाइट> | </वाक्यविन्यास हाइलाइट> | ||
''', ऐसे मूल्यों की उपस्थिति समय से पहले डेटा के अंत का संकेत देगी (सेमीप्रिडिकेट समस्या)। एक प्रहरी मान को कभी-कभी काहिरा में एक हाथी के रूप में जाना जाता है, एक मजाक के कारण जहां इसका उपयोग भौतिक प्रहरी के रूप में किया जाता है। सुरक्षित भाषाओं में, अधिकांश प्रहरी मूल्यों को [[विकल्प प्रकार]]ों से बदला जा सकता है, जो असाधारण स्थितियों की स्पष्ट हैंडलिंग को प्रयुक्त करते हैं।''' | |||
== यह भी देखें == | == यह भी देखें == |
Revision as of 19:26, 6 February 2023
कंप्यूटर प्रोग्रामिंग में, एक सेंटीनल वैल्यू (जिसे फ्लैग वैल्यू, ट्रिप वैल्यू, रॉग वैल्यू, सिग्नल वैल्यू या डमी डेटा भी कहा जाता है)[1] एक कलन विधि के संदर्भ में एक विशेष मूल्य (कंप्यूटर विज्ञान) है जो समाप्ति की स्थिति के रूप में अपनी उपस्थिति का उपयोग करता है, सामान्यतः नियंत्रण प्रवाह या पुनरावर्ती एल्गोरिदम में।
प्रहरी मान इन-बैंड डेटा का एक रूप है जो डेटा के अंत का पता लगाना संभव बनाता है जब कोई आउट-ऑफ-बैंड डेटा (जैसे एक स्पष्ट आकार संकेत) प्रदान नहीं किया जाता है। मूल्य को इस तरह से चुना जाना चाहिए कि यह सभी नियमबद्ध डेटा मूल्यों से अलग होने की गारंटी है अन्यथा, ऐसे मूल्यों की उपस्थिति समय से पहले डेटा के अंत का संकेत देगी (सेमीप्रिडिकेट समस्या)। एक प्रहरी मान को कभी-कभी काहिरा में एक हाथी के रूप में जाना जाता है, एक मजाक के कारण जहां इसका उपयोग भौतिक प्रहरी के रूप में किया जाता है। सुरक्षित भाषाओं में, अधिकांश प्रहरी मूल्यों को विकल्प प्रकारों से बदला जा सकता है, जो असाधारण स्थितियों की स्पष्ट हैंडलिंग को प्रयुक्त करते हैं।
उदाहरण
सामान्य प्रहरी मूल्यों और उनके उपयोगों के कुछ उदाहरण:
- अशक्त वर्ण एक अशक्त-समाप्त स्ट्रिंग के अंत को इंगित करने के लिए
- लिंक की गई सूची या ट्री (डेटा संरचना) के अंत का संकेत देने के लिए अशक्त सूचक।
- समान अंतराल वाले डेटा मानों की धारा में सबसे महत्वपूर्ण बिट, उदाहरण के लिए, 8-बिट बाइट्स में संग्रहीत 7-बिट एएससीआईआई(ASCII) वर्णों की धारा में एक सेट 8 बिट एक विशेष संपत्ति का संकेत देता है (जैसे उलटा वीडियो, बोल्ड अक्षरों या इटैलिक) या धारा का अंत
- गैर-ऋणात्मक पूर्णांकों के अनुक्रम के अंत को इंगित करने के लिए एक ऋणात्मक पूर्णांक
वेरिएंट
थोड़ी अलग परिस्थितियों में उपयोग की जाने वाली एक संबंधित प्रथा, कुछ प्रोसेसिंग लूप में समाप्ति के लिए एक स्पष्ट परीक्षण की आवश्यकता से बचने के लिए, डेटा के अंत में कुछ विशिष्ट मूल्य रखना है, क्योंकि मान पहले से ही परीक्षणों द्वारा समाप्ति को ट्रिगर करेगा अन्य कारणों से उपस्थित हों। उपरोक्त उपयोगों के विपरीत, यह नहीं है कि डेटा को स्वाभाविक रूप से कैसे संग्रहीत या संसाधित किया जाता है, किंतु इसके अतिरिक्त एक अनुकूलन है, जो सीधे एल्गोरिथम की तुलना में समाप्ति की जांच करता है। यह सामान्यतः खोज में प्रयोग किया जाता है।[2][3]
उदाहरण के लिए, किसी अवर्गीकृत सूची (अमूर्त डेटा प्रकार) में किसी विशेष मान की खोज करते समय, प्रत्येक तत्व की तुलना इस मान से की जाएगी, जब समानता पाए जाने आंतरिक फंदे समाप्त हो जाएगा; चूँकि, इस स्थिति से निपटने के लिए कि मूल्य अनुपस्थित होना चाहिए, प्रत्येक चरण के बाद खोज को असफल रूप से पूरा करने के लिए भी परीक्षण करना चाहिए। सूची के अंत में खोजे गए मान को जोड़कर, एक असफल खोज अब संभव नहीं है, और आंतरिक लूप में किसी स्पष्ट समाप्ति परीक्षण की आवश्यकता नहीं है; बाद में, किसी को अभी भी यह तय करना होगा कि क्या एक सही मैच पाया गया था, किंतु इस परीक्षण को प्रत्येक पुनरावृत्ति के अतिरिक्त केवल एक बार करने की आवश्यकता है।[4] नुथ डेटा के अंत में रखे गए मान को प्रहरी के अतिरिक्त एक डमी मान कहता है।
उदाहरण
अरे
उदाहरण के लिए, यदि सी में किसी सरणी में मान की खोज की जाती है, तो एक सीधा कार्यान्वयन इस प्रकार है; बिना किसी परिणाम के वापस आने की अर्धविराम समस्या को हल करने के लिए एक ऋणात्मक संख्या (अमान्य सूचकांक) के उपयोग पर ध्यान दें:
<वाक्यविन्यास लैंग = सी>
int ढूंढें (int arr[], size_t len, int val)
{
के लिए (int i = 0; i < len; i++) यदि (आगमन [i] == वैल) वापसी मैं; वापसी -1; // नहीं मिला
}
</वाक्यविन्यास हाइलाइट>
चूँकि, यह लूप के प्रत्येक पुनरावृत्ति पर दो परीक्षण करता है: क्या मान मिल गया है और क्या सरणी का अंत हो गया है। यह बाद वाला परीक्षण है जिसे प्रहरी मान का उपयोग करके टाला जाता है। यह मानते हुए कि सरणी को एक तत्व द्वारा बढ़ाया जा सकता है (स्मृति आवंटन या सफाई के बिना; यह एक लिंक की गई सूची के लिए अधिक यथार्थवादी है, जैसा कि नीचे दिया गया है), इसे फिर से लिखा जा सकता है:
<वाक्यविन्यास लैंग = सी> int ढूंढें (int arr[], size_t len, int val)
{
int मैं;
आगमन [लेन] = वैल; // प्रहरी मूल्य जोड़ें के लिए (i = 00;; i++) यदि (आगमन [i] == वैल) तोड़ना; यदि (मैं <लेन) वापसी मैं; अन्य वापसी -1; // नहीं मिला
}
</वाक्यविन्यास हाइलाइट>
के लिए परीक्षा i < len
अभी भी उपस्थित है, किंतु इसे लूप के बाहर ले जाया गया है, जिसमें अब केवल एक परीक्षण (मान के लिए) है, और संतरी मूल्य के कारण समाप्त होने की गारंटी है। प्रहरी मान हिट होने पर समाप्ति पर एक ही जाँच होती है, जो प्रत्येक पुनरावृत्ति के लिए एक परीक्षण की जगह लेती है।
सरणी के अंतिम तत्व को एक सेंटीनेल द्वारा अस्थायी रूप से प्रतिस्थापित करना और इसे संभालना भी संभव है, खासकर यदि यह पहुंच गया हो:
<वाक्यविन्यास लैंग = सी>
int ढूंढें (int arr[], size_t len, int val)
{
अंत में;
यदि (लेन == 0) वापसी -1; अंतिम = आगमन [लेन - 1]; आगमन [लेन - 1] = वैल; // प्रहरी मूल्य जोड़ें
int मैं; के लिए (i = 00;; i++) यदि (आगमन [i] == वैल) तोड़ना; आगमन [लेन - 1] = अंतिम; यदि (आगमन [i] == वैल) वापसी मैं; वरना वापसी -1; // पता नहीं चला
}
</वाक्यविन्यास हाइलाइट>
, ऐसे मूल्यों की उपस्थिति समय से पहले डेटा के अंत का संकेत देगी (सेमीप्रिडिकेट समस्या)। एक प्रहरी मान को कभी-कभी काहिरा में एक हाथी के रूप में जाना जाता है, एक मजाक के कारण जहां इसका उपयोग भौतिक प्रहरी के रूप में किया जाता है। सुरक्षित भाषाओं में, अधिकांश प्रहरी मूल्यों को विकल्प प्रकारों से बदला जा सकता है, जो असाधारण स्थितियों की स्पष्ट हैंडलिंग को प्रयुक्त करते हैं।
यह भी देखें
- कनारी मूल्य
- प्रहरी नोड
- अर्धसूत्रीविभाजन समस्या
- काहिरा में हाथी
- जादू संख्या (प्रोग्रामिंग)
- जादू की डोरी
- अशक्त वस्तु पैटर्न
- समय स्वरूपण और भंडारण बग
संदर्भ
- ↑ Knuth, Donald (1973). The Art of Computer Programming, Volume 1: Fundamental Algorithms (Second ed.). Addison-Wesley. pp. 213–214, 631. ISBN 0-201-03809-9.
- ↑ Mehlhorn, Kurt; Sanders, Peter (2008). Algorithms and Data Structures: The Basic Toolbox 3 Representing Sequences by Arrays and Linked Lists (PDF). Springer. p. 63. ISBN 978-3-540-77977-3.
- ↑ McConnell, Steve (2004). Code Complete (2nd ed.). Redmond: Microsoft Press. p. 621. ISBN 0-7356-1967-0.
- ↑ Knuth, Donald (1973). The Art of Computer Programming, Volume 3: Sorting and searching. Addison-Wesley. p. 395. ISBN 0-201-03803-X.