सेंटीनल वैल्यू
कंप्यूटर प्रोग्रामिंग में, एक सेंटीनल वैल्यू (जिसे फ्लैग वैल्यू, ट्रिप वैल्यू, रॉग वैल्यू, सिग्नल वैल्यू या डमी डेटा भी कहा जाता है)[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 = 0 ;; i++) अगर (आगमन [i] == वैल) तोड़ना; अगर (मैं <लेन) वापसी मैं; अन्य वापसी -1; // नहीं मिला
}
</वाक्यविन्यास हाइलाइट>
के लिए परीक्षा i < len
अभी भी मौजूद है, लेकिन इसे लूप के बाहर ले जाया गया है, जिसमें अब केवल एक परीक्षण (मान के लिए) है, और संतरी मूल्य के कारण समाप्त होने की गारंटी है। प्रहरी मान हिट होने पर समाप्ति पर एक ही जाँच होती है, जो प्रत्येक पुनरावृत्ति के लिए एक परीक्षण की जगह लेती है।
सरणी के अंतिम तत्व को एक सेंटीनेल द्वारा अस्थायी रूप से प्रतिस्थापित करना और इसे संभालना भी संभव है, खासकर यदि यह पहुंच गया हो: <वाक्यविन्यास लैंग = सी> int ढूंढें (int arr[], size_t len, int val) {
अंत में;
अगर (लेन == 0) वापसी -1; अंतिम = आगमन [लेन - 1]; आगमन [लेन - 1] = वैल; // प्रहरी मूल्य जोड़ें
int मैं; के लिए (i = 0 ;; 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.