ऐरे (डेटा प्रकार): Difference between revisions
(Created page with "{{short description|Data type that represents a collection of elements (values or variables)}} {{About|the abstract data type|the byte-level structure|Array data structure|oth...") |
No edit summary |
||
Line 1: | Line 1: | ||
{{short description|Data type that represents a collection of elements (values or variables)}} | {{short description|Data type that represents a collection of elements (values or variables)}} | ||
{{About|the abstract data type|the byte-level structure|Array data structure|other types of arrays|Array}} | {{About|the abstract data type|the byte-level structure|Array data structure|other types of arrays|Array}} | ||
[[कंप्यूटर विज्ञान]] में, सरणी एक [[डेटा प्रकार]] है जो 'तत्वों' ([[मूल्य (कंप्यूटर विज्ञान)]] या [[चर (कंप्यूटर विज्ञान)]]) के संग्रह का प्रतिनिधित्व करता है, प्रत्येक एक या एक से अधिक सूचकांकों (कुंजियों की पहचान) द्वारा चुना जाता है जिसे रन पर गणना की जा सकती है समय (कार्यक्रम जीवनचक्र चरण) कार्यक्रम निष्पादन के दौरान। इस तरह के संग्रह को | [[कंप्यूटर विज्ञान]] में, सरणी एक [[डेटा प्रकार]] है जो 'तत्वों' ([[मूल्य (कंप्यूटर विज्ञान)]] या [[चर (कंप्यूटर विज्ञान)]]) के संग्रह का प्रतिनिधित्व करता है, प्रत्येक एक या एक से अधिक सूचकांकों (कुंजियों की पहचान) द्वारा चुना जाता है जिसे रन पर गणना की जा सकती है समय (कार्यक्रम जीवनचक्र चरण) कार्यक्रम निष्पादन के दौरान। इस तरह के संग्रह को सामान्यतः एक सरणी चर या सरणी मान कहा जाता है।<ref name="sebesta">Robert W. Sebesta (2001) ''Concepts of Programming Languages''. Addison-Wesley. 4th edition (1998), 5th edition (2001), {{ISBN|9780201385960}}</ref> गणितीय अवधारणाओं [[वेक्टर (गणित)]] और [[मैट्रिक्स (गणित)]] के अनुरूप, एक और दो सूचकांक वाले सरणी प्रकारों को क्रमशः वेक्टर प्रकार और मैट्रिक्स प्रकार कहा जाता है। अधिक सामान्यतः, एक बहुआयामी सरणी प्रकार को एक [[टेन्सर]] प्रकार कहा जा सकता है, भौतिक अवधारणा, टेंसर के अनुरूप।<ref name="tensorflow">{{Cite web|url=https://www.tensorflow.org/guide/tensor|title=Introduction to Tensors | TensorFlow Core|website=TensorFlow}}</ref> | ||
सरणी प्रकारों के लिए भाषा समर्थन में कुछ [[अंतर्निर्मित प्रकार]] | सरणी प्रकारों के लिए भाषा समर्थन में कुछ [[अंतर्निर्मित प्रकार]] सम्मिलित हो सकते हैं|अंतर्निहित सरणी डेटा प्रकार, कुछ सिंटैक्टिक निर्माण (सरणी प्रकार निर्माता) जो [[प्रोग्रामर]] ऐसे प्रकारों को परिभाषित करने और सरणी चर घोषित करने के लिए उपयोग कर सकते हैं, और सरणी तत्वों को अनुक्रमणित करने के लिए विशेष संकेतन सम्मिलित हो सकते हैं।<ref name="sebesta"/> उदाहरण के लिए, [[पास्कल प्रोग्रामिंग भाषा]] में, डिक्लेरेशन <code>type MyTable = array [1..4,1..2] of integer</code>, नामक एक नए सरणी डेटा प्रकार को परिभाषित करता है <code>MyTable</code>. घोषणा <code>var A: MyTable</code> फिर एक चर परिभाषित करता है <code>A</code> उस प्रकार का, जो आठ तत्वों का योग है, प्रत्येक एक पूर्णांक चर है जिसे दो सूचकांकों द्वारा पहचाना जाता है। पास्कल प्रोग्राम में, उन तत्वों को निरूपित किया जाता है <code>A[1,1]</code>, <code>A[1,2]</code>, <code>A[2,1]</code>, …, <code>A[4,2]</code>.<ref name="pascal">K. Jensen and Niklaus Wirth, ''PASCAL User Manual and Report''. Springer. Paperback edition (2007) 184 pages, {{ISBN|978-3540069508}}</ref> विशेष सरणी प्रकार अधिकांशतः भाषा के मानक [[पुस्तकालय (कंप्यूटर विज्ञान)]] द्वारा परिभाषित किए जाते हैं। | ||
डायनेमिक सूचियाँ भी अधिक सामान्य और | डायनेमिक सूचियाँ भी अधिक सामान्य और प्रयुक्त करने में आसान हैं{{dubious|date=July 2022}} गतिशील सरणियों की तुलना में। ऐरे प्रकारों को [[रिकॉर्ड (कंप्यूटर विज्ञान)]] प्रकारों से मुख्य रूप से अलग किया जाता है क्योंकि वे पास्कल [[समनुदेशन ब्यान]] के रूप में रन टाइम (प्रोग्राम जीवनचक्र चरण) पर तत्व सूचकांकों की गणना करने की अनुमति देते हैं। <code>A[I,J] := A[N-I,2*J]</code>. अन्य बातों के अतिरिक्त, यह सुविधा एकल पुनरावृत्त कथन (कंप्यूटर विज्ञान) को एक सरणी चर के इच्छानुसारढंग से कई तत्वों को संसाधित करने की अनुमति देती है। | ||
अधिक सैद्धांतिक संदर्भों में, विशेष रूप से प्रकार के सिद्धांत में और अमूर्त [[कलन विधि]] के विवरण में, सरणी और सरणी प्रकार कभी-कभी एक [[सार डेटा प्रकार]] (ADT) को संदर्भित करते हैं जिसे सार सरणी भी कहा जाता है या एक [[साहचर्य सरणी]], एक गणित मॉडल का उल्लेख कर सकता है। अधिकांश भाषाओं में एक विशिष्ट सरणी प्रकार के | अधिक सैद्धांतिक संदर्भों में, विशेष रूप से प्रकार के सिद्धांत में और अमूर्त [[कलन विधि]] के विवरण में, सरणी और सरणी प्रकार कभी-कभी एक [[सार डेटा प्रकार]] (ADT) को संदर्भित करते हैं जिसे सार सरणी भी कहा जाता है या एक [[साहचर्य सरणी]], एक गणित मॉडल का उल्लेख कर सकता है। अधिकांश भाषाओं में एक विशिष्ट सरणी प्रकार के मूलभूतसंचालन और व्यवहार - मूल रूप से, तत्वों का एक संग्रह जो रन-टाइम पर गणना किए गए सूचकांकों द्वारा चुना जाता है। | ||
भाषा के आधार पर, सरणी प्रकार अन्य डेटा प्रकारों जैसे [[सूची (कंप्यूटिंग)]] और [[स्ट्रिंग (कंप्यूटर विज्ञान)]] का वर्णन करने वाले अन्य डेटा प्रकारों को ओवरलैप (या पहचाना जा सकता है) कर सकते हैं। ऐरे प्रकार | भाषा के आधार पर, सरणी प्रकार अन्य डेटा प्रकारों जैसे [[सूची (कंप्यूटिंग)]] और [[स्ट्रिंग (कंप्यूटर विज्ञान)]] का वर्णन करने वाले अन्य डेटा प्रकारों को ओवरलैप (या पहचाना जा सकता है) कर सकते हैं। ऐरे प्रकार अधिकांशतः [[सरणी डेटा संरचना]]ओं द्वारा कार्यान्वित किए जाते हैं, किन्तुकभी-कभी अन्य तरीकों से, जैसे [[हैश तालिका]], लिंक्ड सूचियां, या [[खोज पेड़]]। | ||
== इतिहास == | == इतिहास == | ||
[[Heinz Rutishauser]] की प्रोग्रामिंग भाषा सुपरप्लान (1949-1951) में बहुआयामी सरणियाँ | [[Heinz Rutishauser]] की प्रोग्रामिंग भाषा सुपरप्लान (1949-1951) में बहुआयामी सरणियाँ सम्मिलित थीं। रुतिशौसर चूंकि यह वर्णन करते हुए कि उनकी भाषा के लिए एक संकलक कैसे बनाया जाना चाहिए, एक को प्रयुक्त नहीं किया। | ||
असेंबली लैंग्वेज और लो-लेवल लैंग्वेज जैसे BCPL<ref>John Mitchell, ''Concepts of Programming Languages''. Cambridge University Press.</ref> | असेंबली लैंग्वेज और लो-लेवल लैंग्वेज जैसे BCPL<ref>John Mitchell, ''Concepts of Programming Languages''. Cambridge University Press.</ref> सामान्यतः सरणी के लिए कोई सिंटैक्टिक समर्थन नहीं होता है। | ||
कुशल संगणना के लिए सरणी संरचनाओं के महत्व के कारण, [[फोरट्रान]] (1957), [[COBOL]] (1960) और अल्गोल 60 (1960) सहित सबसे | कुशल संगणना के लिए सरणी संरचनाओं के महत्व के कारण, [[फोरट्रान]] (1957), [[COBOL]] (1960) और अल्गोल 60 (1960) सहित सबसे प्रारंभिकुआती उच्च-स्तरीय प्रोग्रामिंग भाषाओं ने बहु-आयामी सरणियों के लिए समर्थन प्रदान किया। | ||
== सार सरणियाँ == | == सार सरणियाँ == | ||
Line 23: | Line 23: | ||
सिद्धांतों को पूरा करने के लिए इन परिचालनों की आवश्यकता होती है<ref>Lukham, Suzuki (1979), "Verification of array, record, and pointer operations in Pascal". ''ACM Transactions on Programming Languages and Systems'' '''1''' (2), 226–244.</ref> | सिद्धांतों को पूरा करने के लिए इन परिचालनों की आवश्यकता होती है<ref>Lukham, Suzuki (1979), "Verification of array, record, and pointer operations in Pascal". ''ACM Transactions on Programming Languages and Systems'' '''1''' (2), 226–244.</ref> | ||
: प्राप्त करें (सेट (ए, आई, वी), आई) = वी | : प्राप्त करें (सेट (ए, आई, वी), आई) = वी | ||
:get(set(A,I, V), J) = get(A, J) | :get(set(A,I, V), J) = get(A, J) यदि I ≠ J | ||
किसी भी सरणी स्थिति A के लिए, कोई मान V, और कोई भी tuples I, J जिसके लिए संचालन परिभाषित हैं। | किसी भी सरणी स्थिति A के लिए, कोई मान V, और कोई भी tuples I, J जिसके लिए संचालन परिभाषित हैं। | ||
प्रथम स्वयंसिद्ध का अर्थ है कि प्रत्येक तत्व एक चर की तरह व्यवहार करता है। दूसरे स्वयंसिद्ध का अर्थ है कि अलग-अलग सूचकांक वाले तत्व [[अलियासिंग (कंप्यूटिंग)]] चर के रूप में व्यवहार करते हैं, | प्रथम स्वयंसिद्ध का अर्थ है कि प्रत्येक तत्व एक चर की तरह व्यवहार करता है। दूसरे स्वयंसिद्ध का अर्थ है कि अलग-अलग सूचकांक वाले तत्व [[अलियासिंग (कंप्यूटिंग)]] चर के रूप में व्यवहार करते हैं, जिससेएक तत्व में मान संग्रहीत करना किसी अन्य तत्व के मूल्य को प्रभावित न करे। | ||
ये स्वयंसिद्ध वैध इंडेक्स ट्यूपल्स I के सेट पर कोई बाधा नहीं डालते हैं, इसलिए इस सार मॉडल का उपयोग [[त्रिकोणीय सरणी]] और अन्य अजीब आकार के सरणियों के लिए किया जा सकता है। | ये स्वयंसिद्ध वैध इंडेक्स ट्यूपल्स I के सेट पर कोई बाधा नहीं डालते हैं, इसलिए इस सार मॉडल का उपयोग [[त्रिकोणीय सरणी]] और अन्य अजीब आकार के सरणियों के लिए किया जा सकता है। | ||
Line 32: | Line 32: | ||
== कार्यान्वयन == | == कार्यान्वयन == | ||
{{Unreferenced section|date=May 2009}} | {{Unreferenced section|date=May 2009}} | ||
ऐरे डेटा संरचना (सूचक अंकगणित द्वारा किए गए अनुक्रमण के साथ) जैसे प्रकार के चर को प्रभावी ढंग से | ऐरे डेटा संरचना (सूचक अंकगणित द्वारा किए गए अनुक्रमण के साथ) जैसे प्रकार के चर को प्रभावी ढंग से प्रयुक्त करने के लिए, कई भाषाएँ [[पूर्णांक (कंप्यूटर विज्ञान)]] डेटा प्रकारों (या अन्य प्रकार जिन्हें पूर्णांक के रूप में व्याख्या की जा सकती हैं, जैसे [[बाइट]]्स और अन्य प्रकार) के लिए सूचकांकों को प्रतिबंधित करती हैं। [[प्रगणित प्रकार]]), और आवश्यक है कि सभी तत्वों का डेटा प्रकार और भंडारण आकार समान हो। उन भाषाओं में से अधिकांश प्रत्येक अनुक्रमणिका को पूर्णांकों के परिमित [[अंतराल (गणित)]] तक सीमित करती हैं, जो कि सरणी चर के पूरे जीवनकाल में स्थिर रहता है। कुछ [[संकलक]] भाषाओं में, वास्तव में, इंडेक्स रेंज को [[संकलन समय]] पर जाना जा सकता है। | ||
दूसरी ओर, कुछ प्रोग्रामिंग लैंग्वेज अधिक उदार सरणी प्रकार प्रदान करती हैं, जो मनमाना मूल्यों, जैसे [[तैरनेवाला स्थल]] | फ़्लोटिंग-पॉइंट नंबर, स्ट्रिंग (कंप्यूटर विज्ञान), [[ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग]], [[संदर्भ (कंप्यूटर विज्ञान)]], आदि द्वारा अनुक्रमण की अनुमति देती हैं। इस तरह के सूचकांक मूल्यों को एक अंतराल तक सीमित नहीं किया जा सकता है, एक निश्चित अंतराल बहुत कम। इसलिए, ये भाषाएं | दूसरी ओर, कुछ प्रोग्रामिंग लैंग्वेज अधिक उदार सरणी प्रकार प्रदान करती हैं, जो मनमाना मूल्यों, जैसे [[तैरनेवाला स्थल]] | फ़्लोटिंग-पॉइंट नंबर, स्ट्रिंग (कंप्यूटर विज्ञान), [[ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग]], [[संदर्भ (कंप्यूटर विज्ञान)]], आदि द्वारा अनुक्रमण की अनुमति देती हैं। इस तरह के सूचकांक मूल्यों को एक अंतराल तक सीमित नहीं किया जा सकता है, एक निश्चित अंतराल बहुत कम। इसलिए, ये भाषाएं सामान्यतः इच्छानुसारढंग से नए तत्वों को किसी भी समय बनाने की अनुमति देती हैं। यह विकल्प सरणी प्रकार के कार्यान्वयन को सरणी डेटा संरचनाओं के रूप में रोकता है। अर्थात्, वे भाषाएँ अधिक सामान्य साहचर्य सरणी शब्दार्थ को प्रयुक्त करने के लिए सरणी-जैसे सिंटैक्स का उपयोग करती हैं, और इसलिए उन्हें हैश तालिका या किसी अन्य [[खोज डेटा संरचना]] द्वारा कार्यान्वित किया जाना चाहिए। | ||
== भाषा समर्थन == | == भाषा समर्थन == | ||
Line 41: | Line 41: | ||
=== बहु-आयामी सरणियाँ === | === बहु-आयामी सरणियाँ === | ||
किसी तत्व को निर्दिष्ट करने के लिए आवश्यक सूचकांकों की संख्या को सरणी प्रकार का आयाम, आयाम या [[रैंक (कंप्यूटर प्रोग्रामिंग)]] कहा जाता है। (यह नामकरण रेखीय बीजगणित में आयाम की अवधारणा के साथ संघर्ष करता है, जो मैट्रिक्स (गणित) # परिभाषा को व्यक्त करता है। इस प्रकार, 5 पंक्तियों और 4 स्तंभों वाली संख्याओं की एक सरणी, इसलिए 20 तत्वों को कंप्यूटिंग संदर्भों में आयाम 2 कहा जाता है, | किसी तत्व को निर्दिष्ट करने के लिए आवश्यक सूचकांकों की संख्या को सरणी प्रकार का आयाम, आयाम या [[रैंक (कंप्यूटर प्रोग्रामिंग)]] कहा जाता है। (यह नामकरण रेखीय बीजगणित में आयाम की अवधारणा के साथ संघर्ष करता है, जो मैट्रिक्स (गणित) # परिभाषा को व्यक्त करता है। इस प्रकार, 5 पंक्तियों और 4 स्तंभों वाली संख्याओं की एक सरणी, इसलिए 20 तत्वों को कंप्यूटिंग संदर्भों में आयाम 2 कहा जाता है, किन्तुएक मैट्रिक्स का प्रतिनिधित्व करता है जिसे 4 × 5-आयामी कहा जाता है। साथ ही, रैंक का कंप्यूटर विज्ञान अर्थ [[टेंसर रैंक]] की धारणा के साथ संघर्ष करता है, जो [[मैट्रिक्स रैंक]] की रैखिक बीजगणित अवधारणा का सामान्यीकरण है।) | ||
[[File:Array of array storage.svg|120px|right|एक द्वि-आयामी सरणी को एक-आयामी सरणियों (पंक्तियों) के एक-आयामी सरणी के रूप में संग्रहीत किया जाता है।]]कई भाषाएँ केवल एक आयामी सरणियों का समर्थन करती हैं। उन भाषाओं में, एक बहु-आयामी सरणी को | [[File:Array of array storage.svg|120px|right|एक द्वि-आयामी सरणी को एक-आयामी सरणियों (पंक्तियों) के एक-आयामी सरणी के रूप में संग्रहीत किया जाता है।]]कई भाषाएँ केवल एक आयामी सरणियों का समर्थन करती हैं। उन भाषाओं में, एक बहु-आयामी सरणी को सामान्यतः एक Iliffe वेक्टर द्वारा दर्शाया जाता है, जो एक आयाम से कम के सरणियों के संदर्भ (कंप्यूटर विज्ञान) की एक-आयामी सरणी है। एक द्वि-आयामी सरणी, विशेष रूप से, इसकी पंक्तियों के पॉइंटर्स [[इलिफ वेक्टर]] के रूप में कार्यान्वित की जाएगी। इस प्रकार एक सरणी A की पंक्ति i और कॉलम j में एक तत्व को डबल इंडेक्सिंग (A[i][j] विशिष्ट संकेतन में) द्वारा एक्सेस किया जाएगा। बहुआयामी सरणियों का अनुकरण करने का यह विधि दांतेदार सरणियों के निर्माण की अनुमति देता है, जहां प्रत्येक पंक्ति का एक अलग आकार हो सकता है - या, सामान्यतः, जहां प्रत्येक सूचकांक की मान्य सीमा सभी पूर्ववर्ती सूचकांकों के मूल्यों पर निर्भर करती है। | ||
बहुआयामी सरणियों के लिए यह प्रतिनिधित्व C और C++ सॉफ्टवेयर में | बहुआयामी सरणियों के लिए यह प्रतिनिधित्व C और C++ सॉफ्टवेयर में अधिक प्रचलित है। यद्यपि, C और C++ बहु-आयामी सरणियों के लिए एक रेखीय अनुक्रमण सूत्र का उपयोग करेंगे जो संकलन समय स्थिर आकार के साथ घोषित किए गए हैं, उदा। द्वारा <code>int A[10][20]</code> या <code>int A[m][n]</code>, पारंपरिक के अतिरिक्त <code>int **A</code>.<ref>Brian W. Kernighan and Dennis M. Ritchie (1988), ''The C programming Language''. Prentice-Hall, p. 81.</ref> | ||
Line 52: | Line 52: | ||
=== सूचकांक प्रकार === | === सूचकांक प्रकार === | ||
सरणी डेटा प्रकारों को | सरणी डेटा प्रकारों को अधिकांशतः सरणी संरचनाओं के रूप में प्रयुक्त किया जाता है: पूर्णांक (या पूरी तरह से आदेशित) मानों तक सीमित सूचकांकों के साथ, सरणी निर्माण समय पर तय की गई अनुक्रमणिका श्रेणियां, और बहु-रेखीय तत्व एड्रेसिंग। अधिकांश तीसरी पीढ़ी की प्रोग्रामिंग भाषा में यही स्थिति थी| तीसरी पीढ़ी की भाषाएँ, और अभी भी अधिकांश [[सिस्टम प्रोग्रामिंग भाषा|प्रणाली प्रोग्रामिंग भाषा]]ओं जैसे [[एडा (प्रोग्रामिंग भाषा)]], [[सी प्रोग्रामिंग भाषा]] और [[सी ++]] का मामला है। यद्यपि, कुछ भाषाओं में, सरणी डेटा प्रकारों में साहचर्य सरणियों के शब्दार्थ होते हैं, जिनमें मनमाना प्रकार और गतिशील तत्व निर्माण के सूचकांक होते हैं। यह कुछ स्क्रिप्टिंग भाषाओं जैसे [[Awk प्रोग्रामिंग लैंग्वेज]] और Lua (प्रोग्रामिंग लैंग्वेज) और मानक C++ लाइब्रेरी द्वारा प्रदान किए गए कुछ ऐरे प्रकारों में होता है। | ||
=== सीमा जाँच === | === सीमा जाँच === | ||
Line 62: | Line 62: | ||
कुछ भाषाएं, जैसे सी, केवल [[शून्य-आधारित नंबरिंग]]|शून्य-आधारित सरणी प्रकार प्रदान करती हैं, जिसके लिए किसी भी इंडेक्स के लिए न्यूनतम मान्य मान 0 है। यह विकल्प सरणी कार्यान्वयन और पता गणनाओं के लिए सुविधाजनक है। सी जैसी भाषा के साथ, किसी भी सरणी के इंटीरियर के लिए एक सूचक को परिभाषित किया जा सकता है जो प्रतीकात्मक रूप से छद्म-सरणी के रूप में कार्य करेगा जो नकारात्मक सूचकांकों को समायोजित करता है। यह केवल इसलिए काम करता है क्योंकि सी उपयोग किए जाने पर सीमाओं के विरुद्ध सूचकांक की जांच नहीं करता है। | कुछ भाषाएं, जैसे सी, केवल [[शून्य-आधारित नंबरिंग]]|शून्य-आधारित सरणी प्रकार प्रदान करती हैं, जिसके लिए किसी भी इंडेक्स के लिए न्यूनतम मान्य मान 0 है। यह विकल्प सरणी कार्यान्वयन और पता गणनाओं के लिए सुविधाजनक है। सी जैसी भाषा के साथ, किसी भी सरणी के इंटीरियर के लिए एक सूचक को परिभाषित किया जा सकता है जो प्रतीकात्मक रूप से छद्म-सरणी के रूप में कार्य करेगा जो नकारात्मक सूचकांकों को समायोजित करता है। यह केवल इसलिए काम करता है क्योंकि सी उपयोग किए जाने पर सीमाओं के विरुद्ध सूचकांक की जांच नहीं करता है। | ||
अन्य भाषाएँ केवल एक-आधारित सरणी प्रकार प्रदान करती हैं, जहाँ प्रत्येक [[अनुक्रम]]णिका 1 से | अन्य भाषाएँ केवल एक-आधारित सरणी प्रकार प्रदान करती हैं, जहाँ प्रत्येक [[अनुक्रम]]णिका 1 से प्रारंभिकू होती है; यह मैट्रिसेस और गणितीय अनुक्रमों के लिए गणित की पारंपरिक परंपरा है। पास्कल और लुआ जैसी कुछ भाषाएं एन-आधारित सरणी प्रकारों का समर्थन करती हैं, जिनके न्यूनतम नियमी सूचकांक प्रोग्रामर द्वारा चुने जाते हैं। प्रत्येक पसंद के सापेक्ष गुण गरमागरम बहस का विषय रहे हैं। शून्य-आधारित इंडेक्सिंग [[ऑफ-बाय-वन एरर]] | ऑफ-बाय-वन या [[बाड़पोस्ट त्रुटि]] से बच सकती है,<ref>[[Edsger W. Dijkstra]], "[http://www.cs.utexas.edu/users/EWD/transcriptions/EWD08xx/EWD831.html Why numbering should start at zero]"</ref> विशेष रूप से 0-आधारित <code>for (i = 0; i < 5; i += 1)</code> पुनरावृत्त (5-0) बार, जबकि समतुल्य 1-आधारित अर्ध-खुली सीमा में <code>for (i = 1; i < 6; i += 1)</code> 6 अपने आप में एक संभावित ऐसी त्रुटि है, जिसकी सामान्यतः आवश्यकता होती है <code>length() + 1</code>, और 1-आधारित समावेशी श्रेणी <code>for (i = 1; i <= 5; i+= 1)</code> पुनरावृत्त (5-1) +1 बार। | ||
=== उच्चतम सूचकांक === | === उच्चतम सूचकांक === | ||
एक सरणी घोषणा में दिखाई देने वाली संख्याओं और उस सरणी के अंतिम तत्व की अनुक्रमणिका के बीच का संबंध भी भाषा के अनुसार भिन्न होता है। कई भाषाओं में (जैसे सी), किसी को सरणी में निहित तत्वों की संख्या निर्दिष्ट करनी चाहिए; जबकि अन्य में (जैसे पास्कल और विज़ुअल बेसिक .NET) अंतिम तत्व के सूचकांक के संख्यात्मक मान को निर्दिष्ट करना चाहिए। कहने की | एक सरणी घोषणा में दिखाई देने वाली संख्याओं और उस सरणी के अंतिम तत्व की अनुक्रमणिका के बीच का संबंध भी भाषा के अनुसार भिन्न होता है। कई भाषाओं में (जैसे सी), किसी को सरणी में निहित तत्वों की संख्या निर्दिष्ट करनी चाहिए; जबकि अन्य में (जैसे पास्कल और विज़ुअल बेसिक .NET) अंतिम तत्व के सूचकांक के संख्यात्मक मान को निर्दिष्ट करना चाहिए। कहने की आवश्यकता नहीं है, यह भेद उन भाषाओं में महत्वहीन है जहां सूचकांक 1 से प्रारंभिकू होते हैं, जैसे लुआ (प्रोग्रामिंग भाषा)। | ||
=== सरणी बीजगणित === | === सरणी बीजगणित === | ||
कुछ प्रोग्रामिंग लैंग्वेज एरे प्रोग्रामिंग को सपोर्ट करती हैं, जहां कुछ डेटा टाइप्स के लिए परिभाषित ऑपरेशंस और फंक्शन्स को उन टाइप्स के एलिमेंट्स के एरे तक बढ़ाया जाता है। इस प्रकार दो सरणियों A और B के संबंधित तत्वों को जोड़ने के लिए A+B लिख सकते हैं। | कुछ प्रोग्रामिंग लैंग्वेज एरे प्रोग्रामिंग को सपोर्ट करती हैं, जहां कुछ डेटा टाइप्स के लिए परिभाषित ऑपरेशंस और फंक्शन्स को उन टाइप्स के एलिमेंट्स के एरे तक बढ़ाया जाता है। इस प्रकार दो सरणियों A और B के संबंधित तत्वों को जोड़ने के लिए A+B लिख सकते हैं। सामान्यतः ये भाषाएँ Hadamard उत्पाद (मैट्रिसेस) | तत्व-दर-तत्व गुणन और रैखिक बीजगणित के मानक [[डॉट उत्पाद]] दोनों प्रदान करती हैं, और इनमें से कौन सा है * ऑपरेटर द्वारा प्रस्तुत भाषा के अनुसार भिन्न होता है। | ||
[[एपीएल प्रोग्रामिंग भाषा]] के इस क्षेत्र में नवाचारों के बाद से [[सरणी प्रोग्रामिंग]] क्षमताओं को प्रदान करने वाली भाषाओं का प्रसार हुआ है। ये [[डोमेन-विशिष्ट भाषा]]ओं की मुख्य क्षमताएँ हैं जैसे | [[एपीएल प्रोग्रामिंग भाषा]] के इस क्षेत्र में नवाचारों के बाद से [[सरणी प्रोग्रामिंग]] क्षमताओं को प्रदान करने वाली भाषाओं का प्रसार हुआ है। ये [[डोमेन-विशिष्ट भाषा]]ओं की मुख्य क्षमताएँ हैं जैसे | ||
Line 77: | Line 77: | ||
=== सरणी अनुक्रमणिका श्रेणी प्रश्न === | === सरणी अनुक्रमणिका श्रेणी प्रश्न === | ||
कुछ प्रोग्रामिंग लैंग्वेज ऐसे ऑपरेशन प्रदान करती हैं जो एक सदिश के आकार (तत्वों की संख्या) को लौटाते हैं, या अधिक सामान्यतः, एक सरणी के प्रत्येक सूचकांक की सीमा। C (प्रोग्रामिंग लैंग्वेज) और C++ सरणियाँ आकार फ़ंक्शन का समर्थन नहीं करती हैं, इसलिए प्रोग्रामर को | कुछ प्रोग्रामिंग लैंग्वेज ऐसे ऑपरेशन प्रदान करती हैं जो एक सदिश के आकार (तत्वों की संख्या) को लौटाते हैं, या अधिक सामान्यतः, एक सरणी के प्रत्येक सूचकांक की सीमा। C (प्रोग्रामिंग लैंग्वेज) और C++ सरणियाँ आकार फ़ंक्शन का समर्थन नहीं करती हैं, इसलिए प्रोग्रामर को अधिकांशतः आकार को धारण करने के लिए अलग चर घोषित करना पड़ता है, और इसे एक अलग पैरामीटर के रूप में प्रक्रियाओं में पास करना पड़ता है। | ||
नव निर्मित सरणी के तत्वों में अपरिभाषित मान हो सकते हैं (जैसा कि सी में), या एक विशिष्ट डिफ़ॉल्ट मान जैसे 0 या शून्य सूचक (जावा में) के रूप में परिभाषित किया जा सकता है। | नव निर्मित सरणी के तत्वों में अपरिभाषित मान हो सकते हैं (जैसा कि सी में), या एक विशिष्ट डिफ़ॉल्ट मान जैसे 0 या शून्य सूचक (जावा में) के रूप में परिभाषित किया जा सकता है। | ||
Line 84: | Line 84: | ||
=== स्लाइसिंग === | === स्लाइसिंग === | ||
एक [[सरणी टुकड़ा करना]] ऑपरेशन एक सरणी-टाइप की गई इकाई (मान या चर) के तत्वों का एक सबसेट लेता है और फिर उन्हें एक अन्य सरणी-टाइप की गई इकाई के रूप में इकट्ठा करता है, संभवतः अन्य सूचकांकों के साथ। यदि सरणी प्रकारों को सरणी संरचनाओं के रूप में कार्यान्वित किया जाता है, तो संरचना के [[डोप वेक्टर]] में हेरफेर करके कई उपयोगी स्लाइसिंग ऑपरेशंस (जैसे कि उप-सरणी का चयन करना, सूचकांकों की अदला-बदली करना या सूचकांकों की दिशा को उलटना) बहुत कुशलता से किया जा सकता है। संभावित स्लाइसिंग कार्यान्वयन विवरण पर निर्भर करती है: उदाहरण के लिए, फोरट्रान मैट्रिक्स चर के एक कॉलम को स्लाइस करने की अनुमति देता है, | एक [[सरणी टुकड़ा करना]] ऑपरेशन एक सरणी-टाइप की गई इकाई (मान या चर) के तत्वों का एक सबसेट लेता है और फिर उन्हें एक अन्य सरणी-टाइप की गई इकाई के रूप में इकट्ठा करता है, संभवतः अन्य सूचकांकों के साथ। यदि सरणी प्रकारों को सरणी संरचनाओं के रूप में कार्यान्वित किया जाता है, तो संरचना के [[डोप वेक्टर]] में हेरफेर करके कई उपयोगी स्लाइसिंग ऑपरेशंस (जैसे कि उप-सरणी का चयन करना, सूचकांकों की अदला-बदली करना या सूचकांकों की दिशा को उलटना) बहुत कुशलता से किया जा सकता है। संभावित स्लाइसिंग कार्यान्वयन विवरण पर निर्भर करती है: उदाहरण के लिए, फोरट्रान मैट्रिक्स चर के एक कॉलम को स्लाइस करने की अनुमति देता है, किन्तुएक पंक्ति नहीं, और इसे वेक्टर के रूप में मानता है; जबकि सी एक मैट्रिक्स से एक पंक्ति को टुकड़ा करने की अनुमति देता है, किन्तुएक स्तंभ नहीं। | ||
दूसरी तरफ, अन्य स्लाइसिंग ऑपरेशंस संभव होते हैं जब सरणी प्रकार अन्य तरीकों से | दूसरी तरफ, अन्य स्लाइसिंग ऑपरेशंस संभव होते हैं जब सरणी प्रकार अन्य तरीकों से प्रयुक्त होते हैं। <!--- Complete: In [[Python (programming language)|Pyhon]], for example, array slices may be deleted or replaced by longer or shorter arrays--> | ||
Line 92: | Line 92: | ||
कुछ भाषाएँ डायनेमिक सरणियों की अनुमति देती हैं (जिन्हें आकार बदलने योग्य, बढ़ने योग्य या एक्स्टेंसिबल भी कहा जाता है): सरणी वेरिएबल्स जिनकी इंडेक्स रेंज को इसके वर्तमान तत्वों के मूल्यों को बदले बिना, निर्माण के बाद किसी भी समय विस्तारित किया जा सकता है। | कुछ भाषाएँ डायनेमिक सरणियों की अनुमति देती हैं (जिन्हें आकार बदलने योग्य, बढ़ने योग्य या एक्स्टेंसिबल भी कहा जाता है): सरणी वेरिएबल्स जिनकी इंडेक्स रेंज को इसके वर्तमान तत्वों के मूल्यों को बदले बिना, निर्माण के बाद किसी भी समय विस्तारित किया जा सकता है। | ||
एक आयामी सरणियों के लिए, यह सुविधा एक ऑपरेशन के रूप में प्रदान की जा सकती है<code>append</code>(ए, एक्स) जो सरणी ए के आकार को एक से बढ़ाता है और फिर अंतिम तत्व का मान एक्स पर सेट करता है। अन्य सरणी प्रकार (जैसे पास्कल स्ट्रिंग्स) एक संयोजन संचालिका प्रदान करते हैं, जिसका उपयोग स्लाइसिंग के साथ मिलकर उस प्रभाव को प्राप्त करने के लिए किया जा सकता है। कुछ भाषाओं में, किसी सरणी के किसी तत्व को मान निर्दिष्ट करने से उस तत्व को | एक आयामी सरणियों के लिए, यह सुविधा एक ऑपरेशन के रूप में प्रदान की जा सकती है<code>append</code>(ए, एक्स) जो सरणी ए के आकार को एक से बढ़ाता है और फिर अंतिम तत्व का मान एक्स पर सेट करता है। अन्य सरणी प्रकार (जैसे पास्कल स्ट्रिंग्स) एक संयोजन संचालिका प्रदान करते हैं, जिसका उपयोग स्लाइसिंग के साथ मिलकर उस प्रभाव को प्राप्त करने के लिए किया जा सकता है। कुछ भाषाओं में, किसी सरणी के किसी तत्व को मान निर्दिष्ट करने से उस तत्व को सम्मिलित करने के लिए, यदि आवश्यक हो, तो स्वचालित रूप से सरणी का विस्तार हो जाता है। अन्य सरणी प्रकारों में, एक स्लाइस को अलग-अलग आकार की एक सरणी द्वारा प्रतिस्थापित किया जा सकता है, जिसके बाद के तत्वों को तदनुसार फिर से क्रमांकित किया जा सकता है - जैसा कि पायथन की सूची असाइनमेंट में A[5:5] = [10,20,30] है, जो तीन नए तत्वों को सम्मिलित करता है ( 10,20, और 30) तत्व ए [5] से पहले। आकार बदलने योग्य सरणियाँ वैचारिक रूप से [[सूची (कंप्यूटर विज्ञान)]] के समान हैं, और दो अवधारणाएँ कुछ भाषाओं में समानार्थी हैं। | ||
एक एक्स्टेंसिबल सरणी को एक निश्चित आकार के सरणी के रूप में | एक एक्स्टेंसिबल सरणी को एक निश्चित आकार के सरणी के रूप में प्रयुक्त किया जा सकता है, जिसमें एक काउंटर होता है जो रिकॉर्ड करता है कि वास्तव में कितने तत्व उपयोग में हैं। <code>append</code> ई> ऑपरेशन केवल काउंटर को बढ़ाता है; जब तक पूरे सरणी का उपयोग नहीं किया जाता है, जब <code>append</code> ऑपरेशन को विफल करने के लिए परिभाषित किया जा सकता है। यह एक निश्चित क्षमता के साथ एक गतिशील सरणी का कार्यान्वयन है, जैसा कि <code>string</code> पास्कल का प्रकार। वैकल्पिक रूप से, <code>append</code> ऑपरेशन बड़े आकार के साथ अंतर्निहित सरणी को फिर से आवंटित कर सकता है, और पुराने तत्वों को नए क्षेत्र में कॉपी कर सकता है। | ||
== यह भी देखें == | == यह भी देखें == |
Revision as of 14:05, 4 March 2023
कंप्यूटर विज्ञान में, सरणी एक डेटा प्रकार है जो 'तत्वों' (मूल्य (कंप्यूटर विज्ञान) या चर (कंप्यूटर विज्ञान)) के संग्रह का प्रतिनिधित्व करता है, प्रत्येक एक या एक से अधिक सूचकांकों (कुंजियों की पहचान) द्वारा चुना जाता है जिसे रन पर गणना की जा सकती है समय (कार्यक्रम जीवनचक्र चरण) कार्यक्रम निष्पादन के दौरान। इस तरह के संग्रह को सामान्यतः एक सरणी चर या सरणी मान कहा जाता है।[1] गणितीय अवधारणाओं वेक्टर (गणित) और मैट्रिक्स (गणित) के अनुरूप, एक और दो सूचकांक वाले सरणी प्रकारों को क्रमशः वेक्टर प्रकार और मैट्रिक्स प्रकार कहा जाता है। अधिक सामान्यतः, एक बहुआयामी सरणी प्रकार को एक टेन्सर प्रकार कहा जा सकता है, भौतिक अवधारणा, टेंसर के अनुरूप।[2]
सरणी प्रकारों के लिए भाषा समर्थन में कुछ अंतर्निर्मित प्रकार सम्मिलित हो सकते हैं|अंतर्निहित सरणी डेटा प्रकार, कुछ सिंटैक्टिक निर्माण (सरणी प्रकार निर्माता) जो प्रोग्रामर ऐसे प्रकारों को परिभाषित करने और सरणी चर घोषित करने के लिए उपयोग कर सकते हैं, और सरणी तत्वों को अनुक्रमणित करने के लिए विशेष संकेतन सम्मिलित हो सकते हैं।[1] उदाहरण के लिए, पास्कल प्रोग्रामिंग भाषा में, डिक्लेरेशन type MyTable = array [1..4,1..2] of integer
, नामक एक नए सरणी डेटा प्रकार को परिभाषित करता है MyTable
. घोषणा var A: MyTable
फिर एक चर परिभाषित करता है A
उस प्रकार का, जो आठ तत्वों का योग है, प्रत्येक एक पूर्णांक चर है जिसे दो सूचकांकों द्वारा पहचाना जाता है। पास्कल प्रोग्राम में, उन तत्वों को निरूपित किया जाता है A[1,1]
, A[1,2]
, A[2,1]
, …, A[4,2]
.[3] विशेष सरणी प्रकार अधिकांशतः भाषा के मानक पुस्तकालय (कंप्यूटर विज्ञान) द्वारा परिभाषित किए जाते हैं।
डायनेमिक सूचियाँ भी अधिक सामान्य और प्रयुक्त करने में आसान हैं[dubious ] गतिशील सरणियों की तुलना में। ऐरे प्रकारों को रिकॉर्ड (कंप्यूटर विज्ञान) प्रकारों से मुख्य रूप से अलग किया जाता है क्योंकि वे पास्कल समनुदेशन ब्यान के रूप में रन टाइम (प्रोग्राम जीवनचक्र चरण) पर तत्व सूचकांकों की गणना करने की अनुमति देते हैं। A[I,J] := A[N-I,2*J]
. अन्य बातों के अतिरिक्त, यह सुविधा एकल पुनरावृत्त कथन (कंप्यूटर विज्ञान) को एक सरणी चर के इच्छानुसारढंग से कई तत्वों को संसाधित करने की अनुमति देती है।
अधिक सैद्धांतिक संदर्भों में, विशेष रूप से प्रकार के सिद्धांत में और अमूर्त कलन विधि के विवरण में, सरणी और सरणी प्रकार कभी-कभी एक सार डेटा प्रकार (ADT) को संदर्भित करते हैं जिसे सार सरणी भी कहा जाता है या एक साहचर्य सरणी, एक गणित मॉडल का उल्लेख कर सकता है। अधिकांश भाषाओं में एक विशिष्ट सरणी प्रकार के मूलभूतसंचालन और व्यवहार - मूल रूप से, तत्वों का एक संग्रह जो रन-टाइम पर गणना किए गए सूचकांकों द्वारा चुना जाता है।
भाषा के आधार पर, सरणी प्रकार अन्य डेटा प्रकारों जैसे सूची (कंप्यूटिंग) और स्ट्रिंग (कंप्यूटर विज्ञान) का वर्णन करने वाले अन्य डेटा प्रकारों को ओवरलैप (या पहचाना जा सकता है) कर सकते हैं। ऐरे प्रकार अधिकांशतः सरणी डेटा संरचनाओं द्वारा कार्यान्वित किए जाते हैं, किन्तुकभी-कभी अन्य तरीकों से, जैसे हैश तालिका, लिंक्ड सूचियां, या खोज पेड़।
इतिहास
Heinz Rutishauser की प्रोग्रामिंग भाषा सुपरप्लान (1949-1951) में बहुआयामी सरणियाँ सम्मिलित थीं। रुतिशौसर चूंकि यह वर्णन करते हुए कि उनकी भाषा के लिए एक संकलक कैसे बनाया जाना चाहिए, एक को प्रयुक्त नहीं किया।
असेंबली लैंग्वेज और लो-लेवल लैंग्वेज जैसे BCPL[4] सामान्यतः सरणी के लिए कोई सिंटैक्टिक समर्थन नहीं होता है।
कुशल संगणना के लिए सरणी संरचनाओं के महत्व के कारण, फोरट्रान (1957), COBOL (1960) और अल्गोल 60 (1960) सहित सबसे प्रारंभिकुआती उच्च-स्तरीय प्रोग्रामिंग भाषाओं ने बहु-आयामी सरणियों के लिए समर्थन प्रदान किया।
सार सरणियाँ
एक सरणी डेटा संरचना को गणितीय रूप से एक सार डेटा संरचना (एक सार सरणी) के रूप में दो कार्यों के साथ तैयार किया जा सकता है
- प्राप्त करें (ए, आई): सरणी ए के तत्व में संग्रहीत डेटा जिसका सूचकांक पूर्णांक टपल I है।
- सेट (ए, आई, वी): वह सरणी जो उस तत्व के मान को वी पर सेट करके परिणाम देती है।
सिद्धांतों को पूरा करने के लिए इन परिचालनों की आवश्यकता होती है[5]
- प्राप्त करें (सेट (ए, आई, वी), आई) = वी
- get(set(A,I, V), J) = get(A, J) यदि I ≠ J
किसी भी सरणी स्थिति A के लिए, कोई मान V, और कोई भी tuples I, J जिसके लिए संचालन परिभाषित हैं।
प्रथम स्वयंसिद्ध का अर्थ है कि प्रत्येक तत्व एक चर की तरह व्यवहार करता है। दूसरे स्वयंसिद्ध का अर्थ है कि अलग-अलग सूचकांक वाले तत्व अलियासिंग (कंप्यूटिंग) चर के रूप में व्यवहार करते हैं, जिससेएक तत्व में मान संग्रहीत करना किसी अन्य तत्व के मूल्य को प्रभावित न करे।
ये स्वयंसिद्ध वैध इंडेक्स ट्यूपल्स I के सेट पर कोई बाधा नहीं डालते हैं, इसलिए इस सार मॉडल का उपयोग त्रिकोणीय सरणी और अन्य अजीब आकार के सरणियों के लिए किया जा सकता है।
कार्यान्वयन
This section does not cite any sources. (May 2009) (Learn how and when to remove this template message) |
ऐरे डेटा संरचना (सूचक अंकगणित द्वारा किए गए अनुक्रमण के साथ) जैसे प्रकार के चर को प्रभावी ढंग से प्रयुक्त करने के लिए, कई भाषाएँ पूर्णांक (कंप्यूटर विज्ञान) डेटा प्रकारों (या अन्य प्रकार जिन्हें पूर्णांक के रूप में व्याख्या की जा सकती हैं, जैसे बाइट्स और अन्य प्रकार) के लिए सूचकांकों को प्रतिबंधित करती हैं। प्रगणित प्रकार), और आवश्यक है कि सभी तत्वों का डेटा प्रकार और भंडारण आकार समान हो। उन भाषाओं में से अधिकांश प्रत्येक अनुक्रमणिका को पूर्णांकों के परिमित अंतराल (गणित) तक सीमित करती हैं, जो कि सरणी चर के पूरे जीवनकाल में स्थिर रहता है। कुछ संकलक भाषाओं में, वास्तव में, इंडेक्स रेंज को संकलन समय पर जाना जा सकता है।
दूसरी ओर, कुछ प्रोग्रामिंग लैंग्वेज अधिक उदार सरणी प्रकार प्रदान करती हैं, जो मनमाना मूल्यों, जैसे तैरनेवाला स्थल | फ़्लोटिंग-पॉइंट नंबर, स्ट्रिंग (कंप्यूटर विज्ञान), ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग, संदर्भ (कंप्यूटर विज्ञान), आदि द्वारा अनुक्रमण की अनुमति देती हैं। इस तरह के सूचकांक मूल्यों को एक अंतराल तक सीमित नहीं किया जा सकता है, एक निश्चित अंतराल बहुत कम। इसलिए, ये भाषाएं सामान्यतः इच्छानुसारढंग से नए तत्वों को किसी भी समय बनाने की अनुमति देती हैं। यह विकल्प सरणी प्रकार के कार्यान्वयन को सरणी डेटा संरचनाओं के रूप में रोकता है। अर्थात्, वे भाषाएँ अधिक सामान्य साहचर्य सरणी शब्दार्थ को प्रयुक्त करने के लिए सरणी-जैसे सिंटैक्स का उपयोग करती हैं, और इसलिए उन्हें हैश तालिका या किसी अन्य खोज डेटा संरचना द्वारा कार्यान्वित किया जाना चाहिए।
भाषा समर्थन
This section does not cite any sources. (May 2009) (Learn how and when to remove this template message) |
बहु-आयामी सरणियाँ
किसी तत्व को निर्दिष्ट करने के लिए आवश्यक सूचकांकों की संख्या को सरणी प्रकार का आयाम, आयाम या रैंक (कंप्यूटर प्रोग्रामिंग) कहा जाता है। (यह नामकरण रेखीय बीजगणित में आयाम की अवधारणा के साथ संघर्ष करता है, जो मैट्रिक्स (गणित) # परिभाषा को व्यक्त करता है। इस प्रकार, 5 पंक्तियों और 4 स्तंभों वाली संख्याओं की एक सरणी, इसलिए 20 तत्वों को कंप्यूटिंग संदर्भों में आयाम 2 कहा जाता है, किन्तुएक मैट्रिक्स का प्रतिनिधित्व करता है जिसे 4 × 5-आयामी कहा जाता है। साथ ही, रैंक का कंप्यूटर विज्ञान अर्थ टेंसर रैंक की धारणा के साथ संघर्ष करता है, जो मैट्रिक्स रैंक की रैखिक बीजगणित अवधारणा का सामान्यीकरण है।)
कई भाषाएँ केवल एक आयामी सरणियों का समर्थन करती हैं। उन भाषाओं में, एक बहु-आयामी सरणी को सामान्यतः एक Iliffe वेक्टर द्वारा दर्शाया जाता है, जो एक आयाम से कम के सरणियों के संदर्भ (कंप्यूटर विज्ञान) की एक-आयामी सरणी है। एक द्वि-आयामी सरणी, विशेष रूप से, इसकी पंक्तियों के पॉइंटर्स इलिफ वेक्टर के रूप में कार्यान्वित की जाएगी। इस प्रकार एक सरणी A की पंक्ति i और कॉलम j में एक तत्व को डबल इंडेक्सिंग (A[i][j] विशिष्ट संकेतन में) द्वारा एक्सेस किया जाएगा। बहुआयामी सरणियों का अनुकरण करने का यह विधि दांतेदार सरणियों के निर्माण की अनुमति देता है, जहां प्रत्येक पंक्ति का एक अलग आकार हो सकता है - या, सामान्यतः, जहां प्रत्येक सूचकांक की मान्य सीमा सभी पूर्ववर्ती सूचकांकों के मूल्यों पर निर्भर करती है।
बहुआयामी सरणियों के लिए यह प्रतिनिधित्व C और C++ सॉफ्टवेयर में अधिक प्रचलित है। यद्यपि, C और C++ बहु-आयामी सरणियों के लिए एक रेखीय अनुक्रमण सूत्र का उपयोग करेंगे जो संकलन समय स्थिर आकार के साथ घोषित किए गए हैं, उदा। द्वारा int A[10][20]
या int A[m][n]
, पारंपरिक के अतिरिक्त int **A
.[6]
अनुक्रमण संकेतन
अधिकांश प्रोग्रामिंग भाषाएं जो सरणियों का समर्थन करती हैं, स्टोर का समर्थन करती हैं और संचालन का चयन करती हैं, और अनुक्रमण के लिए विशेष सिंटैक्स होता है। प्रारंभिक भाषाओं में कोष्ठकों का प्रयोग किया जाता था, उदा. A(i,j)
, फोरट्रान के रूप में; अन्य वर्ग कोष्ठक चुनते हैं, उदा। A[i,j]
या A[i][j]
, जैसा कि एल्गोल 60 और पास्कल में है (समारोह कॉल के लिए कोष्ठकों के उपयोग से अलग करने के लिए)।
सूचकांक प्रकार
सरणी डेटा प्रकारों को अधिकांशतः सरणी संरचनाओं के रूप में प्रयुक्त किया जाता है: पूर्णांक (या पूरी तरह से आदेशित) मानों तक सीमित सूचकांकों के साथ, सरणी निर्माण समय पर तय की गई अनुक्रमणिका श्रेणियां, और बहु-रेखीय तत्व एड्रेसिंग। अधिकांश तीसरी पीढ़ी की प्रोग्रामिंग भाषा में यही स्थिति थी| तीसरी पीढ़ी की भाषाएँ, और अभी भी अधिकांश प्रणाली प्रोग्रामिंग भाषाओं जैसे एडा (प्रोग्रामिंग भाषा), सी प्रोग्रामिंग भाषा और सी ++ का मामला है। यद्यपि, कुछ भाषाओं में, सरणी डेटा प्रकारों में साहचर्य सरणियों के शब्दार्थ होते हैं, जिनमें मनमाना प्रकार और गतिशील तत्व निर्माण के सूचकांक होते हैं। यह कुछ स्क्रिप्टिंग भाषाओं जैसे Awk प्रोग्रामिंग लैंग्वेज और Lua (प्रोग्रामिंग लैंग्वेज) और मानक C++ लाइब्रेरी द्वारा प्रदान किए गए कुछ ऐरे प्रकारों में होता है।
सीमा जाँच
कुछ भाषाएं (जैसे पास्कल और मोडुला) हर एक्सेस पर सीमा जाँच करती हैं, एक अपवाद (कंप्यूटर साइंस) उठाती हैं या किसी इंडेक्स के वैध सीमा से बाहर होने पर प्रोग्राम को रद्द कर देती हैं। गति के लिए व्यापार सुरक्षा के लिए संकलक इन चेकों को बंद करने की अनुमति दे सकते हैं। अन्य भाषाएँ (जैसे फोरट्रान और सी) प्रोग्रामर पर भरोसा करती हैं और कोई जाँच नहीं करती हैं। अच्छे संकलक सूचकांक के संभावित मूल्यों की सीमा निर्धारित करने के लिए कार्यक्रम का विश्लेषण भी कर सकते हैं, और इस विश्लेषण से सीमा-जाँच समाप्त हो सकती है।
सूचकांक उत्पत्ति
कुछ भाषाएं, जैसे सी, केवल शून्य-आधारित नंबरिंग|शून्य-आधारित सरणी प्रकार प्रदान करती हैं, जिसके लिए किसी भी इंडेक्स के लिए न्यूनतम मान्य मान 0 है। यह विकल्प सरणी कार्यान्वयन और पता गणनाओं के लिए सुविधाजनक है। सी जैसी भाषा के साथ, किसी भी सरणी के इंटीरियर के लिए एक सूचक को परिभाषित किया जा सकता है जो प्रतीकात्मक रूप से छद्म-सरणी के रूप में कार्य करेगा जो नकारात्मक सूचकांकों को समायोजित करता है। यह केवल इसलिए काम करता है क्योंकि सी उपयोग किए जाने पर सीमाओं के विरुद्ध सूचकांक की जांच नहीं करता है।
अन्य भाषाएँ केवल एक-आधारित सरणी प्रकार प्रदान करती हैं, जहाँ प्रत्येक अनुक्रमणिका 1 से प्रारंभिकू होती है; यह मैट्रिसेस और गणितीय अनुक्रमों के लिए गणित की पारंपरिक परंपरा है। पास्कल और लुआ जैसी कुछ भाषाएं एन-आधारित सरणी प्रकारों का समर्थन करती हैं, जिनके न्यूनतम नियमी सूचकांक प्रोग्रामर द्वारा चुने जाते हैं। प्रत्येक पसंद के सापेक्ष गुण गरमागरम बहस का विषय रहे हैं। शून्य-आधारित इंडेक्सिंग ऑफ-बाय-वन एरर | ऑफ-बाय-वन या बाड़पोस्ट त्रुटि से बच सकती है,[7] विशेष रूप से 0-आधारित for (i = 0; i < 5; i += 1)
पुनरावृत्त (5-0) बार, जबकि समतुल्य 1-आधारित अर्ध-खुली सीमा में for (i = 1; i < 6; i += 1)
6 अपने आप में एक संभावित ऐसी त्रुटि है, जिसकी सामान्यतः आवश्यकता होती है length() + 1
, और 1-आधारित समावेशी श्रेणी for (i = 1; i <= 5; i+= 1)
पुनरावृत्त (5-1) +1 बार।
उच्चतम सूचकांक
एक सरणी घोषणा में दिखाई देने वाली संख्याओं और उस सरणी के अंतिम तत्व की अनुक्रमणिका के बीच का संबंध भी भाषा के अनुसार भिन्न होता है। कई भाषाओं में (जैसे सी), किसी को सरणी में निहित तत्वों की संख्या निर्दिष्ट करनी चाहिए; जबकि अन्य में (जैसे पास्कल और विज़ुअल बेसिक .NET) अंतिम तत्व के सूचकांक के संख्यात्मक मान को निर्दिष्ट करना चाहिए। कहने की आवश्यकता नहीं है, यह भेद उन भाषाओं में महत्वहीन है जहां सूचकांक 1 से प्रारंभिकू होते हैं, जैसे लुआ (प्रोग्रामिंग भाषा)।
सरणी बीजगणित
कुछ प्रोग्रामिंग लैंग्वेज एरे प्रोग्रामिंग को सपोर्ट करती हैं, जहां कुछ डेटा टाइप्स के लिए परिभाषित ऑपरेशंस और फंक्शन्स को उन टाइप्स के एलिमेंट्स के एरे तक बढ़ाया जाता है। इस प्रकार दो सरणियों A और B के संबंधित तत्वों को जोड़ने के लिए A+B लिख सकते हैं। सामान्यतः ये भाषाएँ Hadamard उत्पाद (मैट्रिसेस) | तत्व-दर-तत्व गुणन और रैखिक बीजगणित के मानक डॉट उत्पाद दोनों प्रदान करती हैं, और इनमें से कौन सा है * ऑपरेटर द्वारा प्रस्तुत भाषा के अनुसार भिन्न होता है।
एपीएल प्रोग्रामिंग भाषा के इस क्षेत्र में नवाचारों के बाद से सरणी प्रोग्रामिंग क्षमताओं को प्रदान करने वाली भाषाओं का प्रसार हुआ है। ये डोमेन-विशिष्ट भाषाओं की मुख्य क्षमताएँ हैं जैसे GAUSS (प्रोग्रामिंग लैंग्वेज), इंटरएक्टिव डेटा भाषा, मैटलैब और मेथेमेटिका वे जूलिया (प्रोग्रामिंग भाषा) और फोरट्रान के हाल के संस्करणों जैसी नई भाषाओं में एक मुख्य सुविधा हैं। ये क्षमताएं अन्य सामान्य प्रयोजन प्रोग्रामिंग भाषाओं के लिए मानक विस्तार पुस्तकालयों के माध्यम से भी प्रदान की जाती हैं (जैसे कि पायथन (प्रोग्रामिंग भाषा) के लिए व्यापक रूप से उपयोग की जाने वाली NumPy लाइब्रेरी)।
स्ट्रिंग प्रकार और सरणियाँ
कई भाषाएं उस प्रकार के मूल्यों को बनाने के लिए विशेष अंकन (स्ट्रिंग शाब्दिक) के साथ एक अंतर्निहित शाब्दिक स्ट्रिंगकंप्यूटर विज्ञान) डेटा प्रकार प्रदान करती हैं। कुछ भाषाओं में (जैसे सी), एक स्ट्रिंग केवल वर्णों की एक सरणी है, या उसी तरह से नियंत्रित की जाती है। अन्य भाषाएँ, जैसे पास्कल प्रोग्रामिंग भाषा, स्ट्रिंग्स और सरणियों के लिए बहुत भिन्न संचालन प्रदान कर सकती हैं।
सरणी अनुक्रमणिका श्रेणी प्रश्न
कुछ प्रोग्रामिंग लैंग्वेज ऐसे ऑपरेशन प्रदान करती हैं जो एक सदिश के आकार (तत्वों की संख्या) को लौटाते हैं, या अधिक सामान्यतः, एक सरणी के प्रत्येक सूचकांक की सीमा। C (प्रोग्रामिंग लैंग्वेज) और C++ सरणियाँ आकार फ़ंक्शन का समर्थन नहीं करती हैं, इसलिए प्रोग्रामर को अधिकांशतः आकार को धारण करने के लिए अलग चर घोषित करना पड़ता है, और इसे एक अलग पैरामीटर के रूप में प्रक्रियाओं में पास करना पड़ता है।
नव निर्मित सरणी के तत्वों में अपरिभाषित मान हो सकते हैं (जैसा कि सी में), या एक विशिष्ट डिफ़ॉल्ट मान जैसे 0 या शून्य सूचक (जावा में) के रूप में परिभाषित किया जा सकता है।
सी ++ में एक एसटीडी :: वेक्टर ऑब्जेक्ट स्टोर का समर्थन करता है, ऊपर चर्चा की गई प्रदर्शन विशेषताओं के साथ संचालन का चयन करता है और जोड़ता है। वैक्टर को उनके आकार के लिए पूछा जा सकता है और उनका आकार बदला जा सकता है। बीच में एक तत्व डालने जैसे धीमे संचालन भी समर्थित हैं।
स्लाइसिंग
एक सरणी टुकड़ा करना ऑपरेशन एक सरणी-टाइप की गई इकाई (मान या चर) के तत्वों का एक सबसेट लेता है और फिर उन्हें एक अन्य सरणी-टाइप की गई इकाई के रूप में इकट्ठा करता है, संभवतः अन्य सूचकांकों के साथ। यदि सरणी प्रकारों को सरणी संरचनाओं के रूप में कार्यान्वित किया जाता है, तो संरचना के डोप वेक्टर में हेरफेर करके कई उपयोगी स्लाइसिंग ऑपरेशंस (जैसे कि उप-सरणी का चयन करना, सूचकांकों की अदला-बदली करना या सूचकांकों की दिशा को उलटना) बहुत कुशलता से किया जा सकता है। संभावित स्लाइसिंग कार्यान्वयन विवरण पर निर्भर करती है: उदाहरण के लिए, फोरट्रान मैट्रिक्स चर के एक कॉलम को स्लाइस करने की अनुमति देता है, किन्तुएक पंक्ति नहीं, और इसे वेक्टर के रूप में मानता है; जबकि सी एक मैट्रिक्स से एक पंक्ति को टुकड़ा करने की अनुमति देता है, किन्तुएक स्तंभ नहीं।
दूसरी तरफ, अन्य स्लाइसिंग ऑपरेशंस संभव होते हैं जब सरणी प्रकार अन्य तरीकों से प्रयुक्त होते हैं।
आकार बदलना
कुछ भाषाएँ डायनेमिक सरणियों की अनुमति देती हैं (जिन्हें आकार बदलने योग्य, बढ़ने योग्य या एक्स्टेंसिबल भी कहा जाता है): सरणी वेरिएबल्स जिनकी इंडेक्स रेंज को इसके वर्तमान तत्वों के मूल्यों को बदले बिना, निर्माण के बाद किसी भी समय विस्तारित किया जा सकता है।
एक आयामी सरणियों के लिए, यह सुविधा एक ऑपरेशन के रूप में प्रदान की जा सकती हैappend
(ए, एक्स) जो सरणी ए के आकार को एक से बढ़ाता है और फिर अंतिम तत्व का मान एक्स पर सेट करता है। अन्य सरणी प्रकार (जैसे पास्कल स्ट्रिंग्स) एक संयोजन संचालिका प्रदान करते हैं, जिसका उपयोग स्लाइसिंग के साथ मिलकर उस प्रभाव को प्राप्त करने के लिए किया जा सकता है। कुछ भाषाओं में, किसी सरणी के किसी तत्व को मान निर्दिष्ट करने से उस तत्व को सम्मिलित करने के लिए, यदि आवश्यक हो, तो स्वचालित रूप से सरणी का विस्तार हो जाता है। अन्य सरणी प्रकारों में, एक स्लाइस को अलग-अलग आकार की एक सरणी द्वारा प्रतिस्थापित किया जा सकता है, जिसके बाद के तत्वों को तदनुसार फिर से क्रमांकित किया जा सकता है - जैसा कि पायथन की सूची असाइनमेंट में A[5:5] = [10,20,30] है, जो तीन नए तत्वों को सम्मिलित करता है ( 10,20, और 30) तत्व ए [5] से पहले। आकार बदलने योग्य सरणियाँ वैचारिक रूप से सूची (कंप्यूटर विज्ञान) के समान हैं, और दो अवधारणाएँ कुछ भाषाओं में समानार्थी हैं।
एक एक्स्टेंसिबल सरणी को एक निश्चित आकार के सरणी के रूप में प्रयुक्त किया जा सकता है, जिसमें एक काउंटर होता है जो रिकॉर्ड करता है कि वास्तव में कितने तत्व उपयोग में हैं। append
ई> ऑपरेशन केवल काउंटर को बढ़ाता है; जब तक पूरे सरणी का उपयोग नहीं किया जाता है, जब append
ऑपरेशन को विफल करने के लिए परिभाषित किया जा सकता है। यह एक निश्चित क्षमता के साथ एक गतिशील सरणी का कार्यान्वयन है, जैसा कि string
पास्कल का प्रकार। वैकल्पिक रूप से, append
ऑपरेशन बड़े आकार के साथ अंतर्निहित सरणी को फिर से आवंटित कर सकता है, और पुराने तत्वों को नए क्षेत्र में कॉपी कर सकता है।
यह भी देखें
- ऐरे एक्सेस विश्लेषण
- सरणी डेटाबेस प्रबंधन प्रणाली
- सीमा-जांच उन्मूलन
- सीमांकक-पृथक मान
- सूचकांक जाँच
- समानांतर सरणी
- विरल सरणी
- चर-लंबाई सरणी
संदर्भ
- ↑ 1.0 1.1 Robert W. Sebesta (2001) Concepts of Programming Languages. Addison-Wesley. 4th edition (1998), 5th edition (2001), ISBN 9780201385960
- ↑ "Introduction to Tensors | TensorFlow Core". TensorFlow.
- ↑ K. Jensen and Niklaus Wirth, PASCAL User Manual and Report. Springer. Paperback edition (2007) 184 pages, ISBN 978-3540069508
- ↑ John Mitchell, Concepts of Programming Languages. Cambridge University Press.
- ↑ Lukham, Suzuki (1979), "Verification of array, record, and pointer operations in Pascal". ACM Transactions on Programming Languages and Systems 1 (2), 226–244.
- ↑ Brian W. Kernighan and Dennis M. Ritchie (1988), The C programming Language. Prentice-Hall, p. 81.
- ↑ Edsger W. Dijkstra, "Why numbering should start at zero"