ऐरे (डेटा प्रकार): Difference between revisions
No edit summary |
No edit summary |
||
(4 intermediate revisions by 4 users not shown) | |||
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)}} | ||
कंप्यूटर विज्ञान में, '''ऐरे [[डेटा प्रकार]]''' है जो 'अवयव' ([[मूल्य (कंप्यूटर विज्ञान)]] या [[चर (कंप्यूटर विज्ञान)|वेरिएबल्स(चर) (कंप्यूटर विज्ञान)]]) के संग्रह का प्रतिनिधित्व करता है, प्रत्येक को एक या एक से अधिक सूचकांकों (कुंजियों की पहचान) द्वारा चुना जाता है जिनकी गणना प्रोग्राम के निष्पादन के समय कार्य समय पर की जा सकती है। इस तरह के संग्रह को सामान्यतः एक ऐरे वेरिएबल्स या ऐरे मान कहा जाता है।<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> विशेष ऐरे प्रकार अधिकांशतः भाषा के मानक [[पुस्तकालय (कंप्यूटर विज्ञान)]] द्वारा परिभाषित किए जाते हैं। | |||
डायनेमिक सूचियाँ भी अधिक सामान्य और प्रयुक्त करने में आसान हैं गतिशील सरणियों की तुलना में। | डायनेमिक सूचियाँ भी अधिक सामान्य और प्रयुक्त करने में आसान हैं गतिशील सरणियों की तुलना में। ऐरे प्रकारों को [[रिकॉर्ड (कंप्यूटर विज्ञान)]] प्रकारों से मुख्य रूप से अलग किया जाता है क्योंकि वे पास्कल [[समनुदेशन ब्यान]] के रूप में कार्य समय (प्रोग्राम जीवनचक्र चरण) पर अवयव सूचकांकों की गणना करने की अनुमति देते हैं। <code>A[I,J] := A[N-I,2*J]</code>. अन्य बातों के अतिरिक्त, यह सुविधा एकल पुनरावृत्त कथन (कंप्यूटर विज्ञान) को ऐरे वेरिएबल्स के इच्छानुसार तरह से कई अवयव को संसाधित करने की अनुमति देती है। | ||
अधिक सैद्धांतिक संदर्भों में, विशेष रूप से प्रकार के सिद्धांत में और अमूर्त [[कलन विधि]] के विवरण में, | अधिक सैद्धांतिक संदर्भों में, विशेष रूप से प्रकार के सिद्धांत में और अमूर्त [[कलन विधि]] के विवरण में, ऐरे और ऐरे प्रकार कभी-कभी [[सार डेटा प्रकार]] (ADT) को संदर्भित करते हैं जिसे सार ऐरे भी कहा जाता है या [[साहचर्य सरणी|साहचर्य ऐरे]], गणित मॉडल का उल्लेख कर सकता है। अधिकांश भाषाओं में विशिष्ट ऐरे प्रकार के मूलभूतसंचालन और व्यवहार - मूल रूप से, अवयव का संग्रह जो रन-टाइम पर गणना किए गए सूचकांकों द्वारा चुना जाता है। | ||
भाषा के आधार पर, | भाषा के आधार पर, ऐरे प्रकार अन्य डेटा प्रकारों जैसे [[सूची (कंप्यूटिंग)]] और [[स्ट्रिंग (कंप्यूटर विज्ञान)]] का वर्णन करने वाले अन्य डेटा प्रकारों को ओवरलैप (या पहचाना जा सकता है) कर सकते हैं। ऐरे प्रकार अधिकांशतः [[सरणी डेटा संरचना|ऐरे डेटा संरचना]]ओं द्वारा कार्यान्वित किए जाते हैं, किन्तु कभी-कभी अन्य तरीकों से, जैसे [[हैश तालिका]], लिंक्ड सूचियां, या [[खोज पेड़|ट्री खोज]] आदि है। | ||
== इतिहास == | == इतिहास == | ||
[[Heinz Rutishauser|हेंज रूटिशॉसर]] की प्रोग्रामिंग भाषा सुपरप्लान (1949-1951) में बहुआयामी सरणियाँ सम्मिलित थीं। रुतिशौसर चूंकि यह वर्णन करते हुए कि उनकी भाषा के लिए संकलक कैसे बनाया जाना चाहिए, | [[Heinz Rutishauser|हेंज रूटिशॉसर]] की प्रोग्रामिंग भाषा सुपरप्लान (1949-1951) में बहुआयामी सरणियाँ सम्मिलित थीं। रुतिशौसर चूंकि यह वर्णन करते हुए कि उनकी भाषा के लिए संकलक कैसे बनाया जाना चाहिए, | ||
असेंबली लैंग्वेज और लो-लेवल लैंग्वेज जैसे बीसीपीएल<ref>John Mitchell, ''Concepts of Programming Languages''. Cambridge University Press.</ref> सामान्यतः | असेंबली लैंग्वेज और लो-लेवल लैंग्वेज जैसे बीसीपीएल<ref>John Mitchell, ''Concepts of Programming Languages''. Cambridge University Press.</ref> सामान्यतः ऐरे के लिए कोई सिंटैक्टिक समर्थन नहीं होता है। | ||
कुशल संगणना के लिए | कुशल संगणना के लिए ऐरे संरचनाओं के महत्व के कारण, [[फोरट्रान]] (1957), [[COBOL|कोबोल]] (1960) और अल्गोल 60 (1960) सहित सबसे प्रारंभिक उच्च-स्तरीय प्रोग्रामिंग भाषाओं ने बहु-आयामी सरणियों के लिए समर्थन प्रदान किया गया। | ||
== सार सरणियाँ == | == सार सरणियाँ == | ||
एक | एक ऐरे डेटा संरचना को गणितीय रूप से [[सार डेटा संरचना]] (एक सार ऐरे) के रूप में दो कार्यों के साथ तैयार किया जा सकता है | ||
: प्राप्त करें (''A'', ''I''): | : प्राप्त करें (''A'', ''I''): ऐरे ''A'' के अवयव में संग्रहीत डेटा जिसका सूचकांक पूर्णांक [[टपल]] है। | ||
: समुच्चय (''A'',''I'',''V''): वह | : समुच्चय (''A'',''I'',''V''): वह ऐरे जो उस अवयव के मान को ''V'' पर समुच्चय करके परिणाम देती है। | ||
सिद्धांतों को पूरा करने के लिए इन परिचालनों की आवश्यकता होती है<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> | ||
: प्राप्त करें (समुच्चय (''A'',''I'', ''V''), ''I'') = ''V'' | : प्राप्त करें (समुच्चय (''A'',''I'', ''V''), ''I'') = ''V'' | ||
:प्राप्त(समुच्चय(A,I, V), J) = प्राप्त(A, J) यदि I ≠ J | :प्राप्त(समुच्चय(A,I, V), J) = प्राप्त(A, J) यदि I ≠ J | ||
किसी भी | किसी भी ऐरे स्थिति A के लिए, कोई मान V, और कोई भी टपल्स I, J जिसके लिए संचालन परिभाषित हैं। | ||
प्रथम स्वयंसिद्ध का अर्थ है कि प्रत्येक अवयव वेरिएबल्स की तरह व्यवहार करता है। दूसरे स्वयंसिद्ध का अर्थ है कि अलग-अलग सूचकांक वाले अवयव [[अलियासिंग (कंप्यूटिंग)]] वेरिएबल्स के रूप में व्यवहार करते हैं, जिससेएक अवयव में मान संग्रहीत करना किसी अन्य अवयव के मूल्य को प्रभावित न करे। | प्रथम स्वयंसिद्ध का अर्थ है कि प्रत्येक अवयव वेरिएबल्स की तरह व्यवहार करता है। दूसरे स्वयंसिद्ध का अर्थ है कि अलग-अलग सूचकांक वाले अवयव [[अलियासिंग (कंप्यूटिंग)]] वेरिएबल्स के रूप में व्यवहार करते हैं, जिससेएक अवयव में मान संग्रहीत करना किसी अन्य अवयव के मूल्य को प्रभावित न करे। | ||
ये स्वयंसिद्ध वैध इंडेक्स ट्यूपल्स I के समुच्चय पर कोई बाधा नहीं डालते हैं, इसलिए इस सार मॉडल का उपयोग [[त्रिकोणीय सरणी]] और अन्य अजीब आकार के सरणियों के लिए किया जा सकता है। | ये स्वयंसिद्ध वैध इंडेक्स ट्यूपल्स I के समुच्चय पर कोई बाधा नहीं डालते हैं, इसलिए इस सार मॉडल का उपयोग [[त्रिकोणीय सरणी|त्रिकोणीय ऐरे]] और अन्य अजीब आकार के सरणियों के लिए किया जा सकता है। | ||
== कार्यान्वयन == | == कार्यान्वयन == | ||
ऐरे डेटा संरचना (सूचक अंकगणित द्वारा किए गए अनुक्रमण के साथ) जैसे प्रकार के वेरिएबल्स को प्रभावी ढंग से प्रयुक्त करने के लिए, कई भाषाएँ [[पूर्णांक (कंप्यूटर विज्ञान)]] डेटा प्रकारों (या अन्य प्रकार जिन्हें पूर्णांक के रूप में व्याख्या की जा सकती हैं, जैसे [[बाइट|बाइटस]] और अन्य प्रकार) के लिए सूचकांकों को प्रतिबंधित करती हैं। [[प्रगणित प्रकार]]), और आवश्यक है कि सभी अवयव का डेटा प्रकार और भंडारण आकार समान हो। उन भाषाओं में से अधिकांश प्रत्येक अनुक्रमणिका को पूर्णांकों के परिमित [[अंतराल (गणित)]] तक सीमित करती हैं, जो कि ऐरे वेरिएबल्स के पूरे जीवनकाल में स्थिर रहता है। कुछ [[संकलक]] भाषाओं में, वास्तव में, इंडेक्स रेंज को [[संकलन समय]] पर जाना जा सकता है। | |||
दूसरी ओर, कुछ प्रोग्रामिंग लैंग्वेज अधिक उदार | दूसरी ओर, कुछ प्रोग्रामिंग लैंग्वेज अधिक उदार ऐरे प्रकार प्रदान करती हैं, जो मनमाना मूल्यों, जैसे [[तैरनेवाला स्थल]] | फ़्लोटिंग-पॉइंट नंबर, स्ट्रिंग (कंप्यूटर विज्ञान), [[ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग]], [[संदर्भ (कंप्यूटर विज्ञान)]], आदि द्वारा अनुक्रमण की अनुमति देती हैं। इस तरह के सूचकांक मूल्यों को अंतराल तक सीमित नहीं किया जा सकता है, निश्चित अंतराल बहुत कम। इसलिए, ये भाषाएं सामान्यतः इच्छानुसार तरह से नए अवयव को किसी भी समय बनाने की अनुमति देती हैं। यह विकल्प ऐरे प्रकार के कार्यान्वयन को ऐरे डेटा संरचनाओं के रूप में रोकता है। अर्थात्, वे भाषाएँ अधिक सामान्य साहचर्य ऐरे शब्दार्थ को प्रयुक्त करने के लिए ऐरे-जैसे सिंटैक्स का उपयोग करती हैं, और इसलिए उन्हें हैश तालिका या किसी अन्य [[खोज डेटा संरचना]] द्वारा कार्यान्वित किया जाना चाहिए। | ||
== भाषा समर्थन == | == भाषा समर्थन == | ||
=== बहु-आयामी सरणियाँ === | === बहु-आयामी सरणियाँ === | ||
किसी अवयव को निर्दिष्ट करने के लिए आवश्यक सूचकांकों की संख्या को | किसी अवयव को निर्दिष्ट करने के लिए आवश्यक सूचकांकों की संख्या को ऐरे प्रकार का आयाम, आयाम या [[रैंक (कंप्यूटर प्रोग्रामिंग)]] कहा जाता है। (यह नामकरण रेखीय बीजगणित में आयाम की अवधारणा के साथ संघर्ष करता है, जो मैट्रिक्स (गणित) # परिभाषा को व्यक्त करता है। इस प्रकार, 5 पंक्तियों और 4 स्तंभों वाली संख्याओं की ऐरे, इसलिए 20 अवयव को कंप्यूटिंग संदर्भों में आयाम 2 कहा जाता है, किन्तु एक मैट्रिक्स का प्रतिनिधित्व करता है जिसे 4 × 5-आयामी कहा जाता है। साथ ही, रैंक का कंप्यूटर विज्ञान अर्थ [[टेंसर रैंक]] की धारणा के साथ संघर्ष करता है, जो [[मैट्रिक्स रैंक]] की रैखिक बीजगणित अवधारणा का सामान्यीकरण है।) | ||
[[File:Array of array storage.svg|120px|right|एक द्वि-आयामी सरणी को एक-आयामी सरणियों (पंक्तियों) के एक-आयामी सरणी के रूप में संग्रहीत किया जाता है।]]कई भाषाएँ केवल आयामी सरणियों का समर्थन करती हैं। उन भाषाओं में, एक बहु-आयामी | [[File:Array of array storage.svg|120px|right|एक द्वि-आयामी ऐरे को एक-आयामी सरणियों (पंक्तियों) के एक-आयामी ऐरे के रूप में संग्रहीत किया जाता है।|alt=एक द्वि-आयामी सरणी को एक-आयामी सरणियों (पंक्तियों) के एक-आयामी सरणी के रूप में संग्रहीत किया जाता है।]]कई भाषाएँ केवल आयामी सरणियों का समर्थन करती हैं। उन भाषाओं में, एक बहु-आयामी ऐरे को सामान्यतः Iliffe वेक्टर द्वारा दर्शाया जाता है, जो एक आयाम से कम के सरणियों के संदर्भ (कंप्यूटर विज्ञान) की एक-आयामी ऐरे है। एक द्वि-आयामी ऐरे, विशेष रूप से, इसकी पंक्तियों के पॉइंटर्स [[इलिफ वेक्टर]] के रूप में कार्यान्वित की जाएगी। इस प्रकार ऐरे A की पंक्ति i और कॉलम j में एक अवयव को डबल इंडेक्सिंग (A[i][j] विशिष्ट संकेतन में) द्वारा अभिगम किया जाएगा। बहुआयामी सरणियों का अनुकरण करने का यह विधि दांतेदार सरणियों के निर्माण की अनुमति देता है, जहां प्रत्येक पंक्ति का एक अलग आकार हो सकता है - या, सामान्यतः, जहां प्रत्येक सूचकांक की मान्य सीमा सभी पूर्ववर्ती सूचकांकों के मूल्यों पर निर्भर करती है। | ||
बहुआयामी सरणियों के लिए यह प्रतिनिधित्व सी और सी ++ सॉफ्टवेयर में अधिक प्रचलित है। यद्यपि, सी और सी ++ बहु-आयामी सरणियों के लिए रेखीय अनुक्रमण सूत्र का उपयोग करेंगे जो संकलन समय स्थिर आकार के साथ घोषित किए गए हैं, उदा। पारंपरिक <code>int **A</code>. के अतिरिक्त <code>int A[10][20]</code> या <code>int A[m][n]</code>, द्वारा। <ref>Brian W. Kernighan and Dennis M. Ritchie (1988), ''The C programming Language''. Prentice-Hall, p. 81.</ref> | बहुआयामी सरणियों के लिए यह प्रतिनिधित्व सी और सी ++ सॉफ्टवेयर में अधिक प्रचलित है। यद्यपि, सी और सी ++ बहु-आयामी सरणियों के लिए रेखीय अनुक्रमण सूत्र का उपयोग करेंगे जो संकलन समय स्थिर आकार के साथ घोषित किए गए हैं, उदा। पारंपरिक <code>int **A</code>. के अतिरिक्त <code>int A[10][20]</code> या <code>int A[m][n]</code>, द्वारा। <ref>Brian W. Kernighan and Dennis M. Ritchie (1988), ''The C programming Language''. Prentice-Hall, p. 81.</ref> | ||
Line 49: | Line 48: | ||
=== सूचकांक प्रकार === | === सूचकांक प्रकार === | ||
ऐरे डेटा प्रकारों को अधिकांशतः ऐरे संरचनाओं के रूप में प्रयुक्त किया जाता है: पूर्णांक (या पूरी तरह से आदेशित) मानों तक सीमित सूचकांकों के साथ, ऐरे निर्माण समय पर तय की गई अनुक्रमणिका श्रेणियां, और बहु-रेखीय अवयव एड्रेसिंग। अधिकांश तीसरी पीढ़ी की प्रोग्रामिंग भाषा में यही स्थिति थी| तीसरी पीढ़ी की भाषाएँ, और अभी भी अधिकांश [[सिस्टम प्रोग्रामिंग भाषा|प्रणाली प्रोग्रामिंग भाषा]]ओं जैसे [[एडा (प्रोग्रामिंग भाषा)]], [[सी प्रोग्रामिंग भाषा]] और [[सी ++]] का मामला है। यद्यपि, कुछ भाषाओं में, ऐरे डेटा प्रकारों में साहचर्य सरणियों के शब्दार्थ होते हैं, जिनमें मनमाना प्रकार और गतिशील अवयव निर्माण के सूचकांक होते हैं। यह कुछ स्क्रिप्टिंग भाषाओं जैसे [[Awk प्रोग्रामिंग लैंग्वेज|एडब्लूके प्रोग्रामिंग लैंग्वेज]] और लुआ (प्रोग्रामिंग लैंग्वेज) और मानक सी ++ लाइब्रेरी द्वारा प्रदान किए गए कुछ ऐरे प्रकारों में होता है। | |||
=== सीमा जाँच === | === सीमा जाँच === | ||
{{main|सीमा की जांच}} | {{main|सीमा की जांच}} | ||
कुछ भाषाएं (जैसे पास्कल और मोडुला) हर अभिगम पर [[सीमा जाँच]] करती हैं, अपवाद (कंप्यूटर साइंस) उठाती हैं या किसी इंडेक्स के वैध सीमा से बाहर होने पर प्रोग्राम को रद्द कर देती हैं। गति के लिए व्यापार सुरक्षा के लिए संकलक इन चेकों को बंद करने की अनुमति दे सकते हैं। अन्य भाषाएँ (जैसे फोरट्रान और सी) प्रोग्रामर पर भरोसा करती हैं और कोई जाँच नहीं करती हैं। अच्छे संकलक सूचकांक के संभावित मूल्यों की सीमा निर्धारित करने के लिए प्रोग्राम का विश्लेषण भी कर सकते हैं, और इस विश्लेषण से सीमा-जाँच समाप्त हो सकती है। | कुछ भाषाएं (जैसे पास्कल और मोडुला) हर अभिगम पर [[सीमा जाँच]] करती हैं, अपवाद (कंप्यूटर साइंस) उठाती हैं या किसी इंडेक्स के वैध सीमा से बाहर होने पर प्रोग्राम को रद्द कर देती हैं। गति के लिए व्यापार सुरक्षा के लिए संकलक इन चेकों को बंद करने की अनुमति दे सकते हैं। अन्य भाषाएँ (जैसे फोरट्रान और सी) प्रोग्रामर पर भरोसा करती हैं और कोई जाँच नहीं करती हैं। अच्छे संकलक सूचकांक के संभावित मूल्यों की सीमा निर्धारित करने के लिए प्रोग्राम का विश्लेषण भी कर सकते हैं, और इस विश्लेषण से सीमा-जाँच समाप्त हो सकती है। | ||
=== सूचकांक उत्पत्ति === | === सूचकांक उत्पत्ति === | ||
{{further|प्रोग्रामिंग भाषाओं की तुलना (सरणी)}} | {{further|प्रोग्रामिंग भाषाओं की तुलना (सरणी)}} | ||
कुछ भाषाएं, जैसे सी, केवल [[शून्य-आधारित नंबरिंग]]|शून्य-आधारित | कुछ भाषाएं, जैसे सी, केवल [[शून्य-आधारित नंबरिंग]]|शून्य-आधारित ऐरे प्रकार प्रदान करती हैं, जिसके लिए किसी भी इंडेक्स के लिए न्यूनतम मान्य मान 0 है। यह विकल्प ऐरे कार्यान्वयन और पता गणनाओं के लिए सुविधाजनक है। सी जैसी भाषा के साथ, किसी भी ऐरे के इंटीरियर के लिए सूचक को परिभाषित किया जा सकता है जो प्रतीकात्मक रूप से छद्म-ऐरे के रूप में कार्य करेगा जो नकारात्मक सूचकांकों को समायोजित करता है। यह केवल इसलिए काम करता है क्योंकि सी उपयोग किए जाने पर सीमाओं के विरुद्ध सूचकांक की जांच नहीं करता है। | ||
अन्य भाषाएँ केवल एक-आधारित | अन्य भाषाएँ केवल एक-आधारित ऐरे प्रकार प्रदान करती हैं, जहाँ प्रत्येक [[अनुक्रम]]णिका 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 बार। | ||
=== उच्चतम सूचकांक === | === उच्चतम सूचकांक === | ||
एक | एक ऐरे घोषणा में दिखाई देने वाली संख्याओं और उस ऐरे के अंतिम अवयव की अनुक्रमणिका के बीच का संबंध भी भाषा के अनुसार भिन्न होता है। कई भाषाओं में (जैसे सी), किसी को ऐरे में निहित अवयव की संख्या निर्दिष्ट करनी चाहिए; जबकि अन्य में (जैसे पास्कल और विज़ुअल बेसिक .नेट) अंतिम अवयव के सूचकांक के संख्यात्मक मान को निर्दिष्ट करना चाहिए। कहने की आवश्यकता नहीं है, यह भेद उन भाषाओं में महत्वहीन है जहां सूचकांक 1 से प्रारंभिक होते हैं, जैसे लुआ (प्रोग्रामिंग भाषा)। | ||
=== | === ऐरे बीजगणित === | ||
कुछ प्रोग्रामिंग लैंग्वेज | कुछ प्रोग्रामिंग लैंग्वेज ऐरे प्रोग्रामिंग को सपोर्ट करती हैं, जहां कुछ डेटा टाइप्स के लिए परिभाषित ऑपरेशंस और फंक्शन्स को उन टाइप्स के एलिमेंट्स के ऐरे तक बढ़ाया जाता है। इस प्रकार दो सरणियों A और B के संबंधित अवयव को जोड़ने के लिए A+B लिख सकते हैं। सामान्यतः ये भाषाएँ हैडमार्ड उत्पाद (मैट्रिसेस) | अवयव-दर-अवयव गुणन और रैखिक बीजगणित के मानक [[डॉट उत्पाद]] दोनों प्रदान करती हैं, और इनमें से कौन सा है * ऑपरेटर द्वारा प्रस्तुत भाषा के अनुसार भिन्न होता है। | ||
[[एपीएल प्रोग्रामिंग भाषा]] के इस क्षेत्र में नवाचारों के बाद से [[सरणी प्रोग्रामिंग]] क्षमताओं को प्रदान करने वाली भाषाओं का प्रसार हुआ है। ये [[डोमेन-विशिष्ट भाषा]]ओं की मुख्य क्षमताएँ हैं जैसे गॉस (प्रोग्रामिंग लैंग्वेज), [[इंटरएक्टिव डेटा भाषा]], मैटलैब और [[मेथेमेटिका]] वे [[जूलिया (प्रोग्रामिंग भाषा)]] और [[फोरट्रान]] के हाल के संस्करणों जैसी नई भाषाओं में मुख्य सुविधा हैं। ये क्षमताएं अन्य सामान्य प्रयोजन प्रोग्रामिंग भाषाओं के लिए मानक विस्तार पुस्तकालयों के माध्यम से भी प्रदान की जाती हैं (जैसे कि [[पायथन (प्रोग्रामिंग भाषा)]] के लिए व्यापक रूप से उपयोग की जाने वाली [[NumPy|न्यूमपी]] लाइब्रेरी)। | [[एपीएल प्रोग्रामिंग भाषा]] के इस क्षेत्र में नवाचारों के बाद से [[सरणी प्रोग्रामिंग|ऐरे प्रोग्रामिंग]] क्षमताओं को प्रदान करने वाली भाषाओं का प्रसार हुआ है। ये [[डोमेन-विशिष्ट भाषा]]ओं की मुख्य क्षमताएँ हैं जैसे गॉस (प्रोग्रामिंग लैंग्वेज), [[इंटरएक्टिव डेटा भाषा]], मैटलैब और [[मेथेमेटिका]] वे [[जूलिया (प्रोग्रामिंग भाषा)]] और [[फोरट्रान]] के हाल के संस्करणों जैसी नई भाषाओं में मुख्य सुविधा हैं। ये क्षमताएं अन्य सामान्य प्रयोजन प्रोग्रामिंग भाषाओं के लिए मानक विस्तार पुस्तकालयों के माध्यम से भी प्रदान की जाती हैं (जैसे कि [[पायथन (प्रोग्रामिंग भाषा)]] के लिए व्यापक रूप से उपयोग की जाने वाली [[NumPy|न्यूमपी]] लाइब्रेरी)। | ||
=== स्ट्रिंग प्रकार और सरणियाँ === | === स्ट्रिंग प्रकार और सरणियाँ === | ||
कई भाषाएं उस प्रकार के मूल्यों को बनाने के लिए विशेष अंकन (स्ट्रिंग शाब्दिक) के साथ अंतर्निहित [[शाब्दिक स्ट्रिंग]]कंप्यूटर विज्ञान) डेटा प्रकार प्रदान करती हैं। कुछ भाषाओं में (जैसे सी), स्ट्रिंग केवल वर्णों की | कई भाषाएं उस प्रकार के मूल्यों को बनाने के लिए विशेष अंकन (स्ट्रिंग शाब्दिक) के साथ अंतर्निहित [[शाब्दिक स्ट्रिंग]]कंप्यूटर विज्ञान) डेटा प्रकार प्रदान करती हैं। कुछ भाषाओं में (जैसे सी), स्ट्रिंग केवल वर्णों की ऐरे है, या उसी तरह से नियंत्रित की जाती है। अन्य भाषाएँ, जैसे पास्कल प्रोग्रामिंग भाषा, स्ट्रिंग्स और सरणियों के लिए बहुत भिन्न संचालन प्रदान कर सकती हैं। | ||
=== | === ऐरे अनुक्रमणिका श्रेणी प्रश्न === | ||
कुछ प्रोग्रामिंग लैंग्वेज ऐसे ऑपरेशन प्रदान करती हैं जो सदिश के आकार (अवयव की संख्या) को लौटाते हैं, या अधिक सामान्यतः, | कुछ प्रोग्रामिंग लैंग्वेज ऐसे ऑपरेशन प्रदान करती हैं जो सदिश के आकार (अवयव की संख्या) को लौटाते हैं, या अधिक सामान्यतः, ऐरे के प्रत्येक सूचकांक की सीमा। सी (प्रोग्रामिंग लैंग्वेज) और सी ++ सरणियाँ आकार फ़ंक्शन का समर्थन नहीं करती हैं, इसलिए प्रोग्रामर को अधिकांशतः आकार को धारण करने के लिए अलग वेरिएबल्स घोषित करना पड़ता है, और इसे एक अलग पैरामीटर के रूप में प्रक्रियाओं में पास करना पड़ता है। | ||
नव निर्मित | नव निर्मित ऐरे के अवयव में अपरिभाषित मान हो सकते हैं (जैसा कि सी में), या विशिष्ट डिफ़ॉल्ट मान जैसे 0 या शून्य सूचक (जावा में) के रूप में परिभाषित किया जा सकता है। | ||
सी ++ में एसटीडी :: वेक्टर ऑब्जेक्ट स्टोर का समर्थन करता है, ऊपर चर्चा की गई प्रदर्शन विशेषताओं के साथ संचालन का चयन करता है और जोड़ता है। वैक्टर को उनके आकार के लिए पूछा जा सकता है और उनका आकार बदला जा सकता है। बीच में अवयव डालने जैसे धीमे संचालन भी समर्थित हैं। | सी ++ में एसटीडी :: वेक्टर ऑब्जेक्ट स्टोर का समर्थन करता है, ऊपर चर्चा की गई प्रदर्शन विशेषताओं के साथ संचालन का चयन करता है और जोड़ता है। वैक्टर को उनके आकार के लिए पूछा जा सकता है और उनका आकार बदला जा सकता है। बीच में अवयव डालने जैसे धीमे संचालन भी समर्थित हैं। | ||
=== स्लाइसिंग === | === स्लाइसिंग === | ||
एक [[सरणी टुकड़ा करना| | एक [[सरणी टुकड़ा करना|ऐरे भाग करना]] ऑपरेशन ऐरे-टाइप की गई इकाई (मान या वेरिएबल्स) के अवयव का उपसमुच्चय लेता है और फिर उन्हें अन्य ऐरे-टाइप की गई इकाई के रूप में इकट्ठा करता है, संभवतः अन्य सूचकांकों के साथ। यदि ऐरे प्रकारों को ऐरे संरचनाओं के रूप में कार्यान्वित किया जाता है, तो संरचना के [[डोप वेक्टर]] में हेरफेर करके कई उपयोगी स्लाइसिंग ऑपरेशंस (जैसे कि उप-ऐरे का चयन करना, सूचकांकों की अदला-बदली करना या सूचकांकों की दिशा को उलटना) बहुत कुशलता से किया जा सकता है। संभावित स्लाइसिंग कार्यान्वयन विवरण पर निर्भर करती है: उदाहरण के लिए, फोरट्रान मैट्रिक्स वेरिएबल्स के एक कॉलम को स्लाइस करने की अनुमति देता है, किन्तु एक पंक्ति नहीं, और इसे वेक्टर के रूप में मानता है; जबकि सी मैट्रिक्स से पंक्ति को भाग करने की अनुमति देता है, किन्तु एक स्तंभ नहीं है। | ||
दूसरी तरफ, अन्य स्लाइसिंग ऑपरेशंस संभव होते हैं जब | दूसरी तरफ, अन्य स्लाइसिंग ऑपरेशंस संभव होते हैं जब ऐरे प्रकार अन्य तरीकों से प्रयुक्त होते हैं। | ||
=== आकार बदलना === | === आकार बदलना === | ||
कुछ भाषाएँ डायनेमिक सरणियों की अनुमति देती हैं (जिन्हें आकार बदलने योग्य, बढ़ने योग्य या एक्स्टेंसिबल भी कहा जाता है): | कुछ भाषाएँ डायनेमिक सरणियों की अनुमति देती हैं (जिन्हें आकार बदलने योग्य, बढ़ने योग्य या एक्स्टेंसिबल भी कहा जाता है): ऐरे वेरिएबल्स जिनकी इंडेक्स रेंज को इसके वर्तमान अवयव के मूल्यों को बदले बिना, निर्माण के बाद किसी भी समय विस्तारित किया जा सकता है। | ||
एक आयामी सरणियों के लिए, यह सुविधा ऑपरेशन के रूप में प्रदान की जा सकती है<code>append</code>(''A'',''x'') जो | एक आयामी सरणियों के लिए, यह सुविधा ऑपरेशन के रूप में प्रदान की जा सकती है<code>append</code>(''A'',''x'') जो ऐरे A के आकार को एक से बढ़ाता है और फिर अंतिम अवयव का मान एक्स पर समुच्चय करता है। अन्य ऐरे प्रकार (जैसे पास्कल स्ट्रिंग्स) संयोजन संचालिका प्रदान करते हैं, जिसका उपयोग स्लाइसिंग के साथ मिलकर उस प्रभाव को प्राप्त करने के लिए किया जा सकता है। कुछ भाषाओं में, किसी ऐरे के किसी अवयव को मान निर्दिष्ट करने से उस अवयव को सम्मिलित करने के लिए, यदि आवश्यक हो, तो स्वचालित रूप से ऐरे का विस्तार हो जाता है। अन्य ऐरे प्रकारों में, एक स्लाइस को अलग-अलग आकार की एक ऐरे द्वारा प्रतिस्थापित किया जा सकता है, जिसके बाद के अवयव को तदनुसार फिर से क्रमांकित किया जा सकता है - जैसा कि पायथन की सूची असाइनमेंट में A[5:5] = [10,20,30] है, जो तीन नए अवयव को सम्मिलित करता है ( 10,20, और 30) अवयव A [5] से पहले। आकार बदलने योग्य सरणियाँ वैचारिक रूप से [[सूची (कंप्यूटर विज्ञान)]] के समान हैं, और दो अवधारणाएँ कुछ भाषाओं में समानार्थी हैं। | ||
एक एक्स्टेंसिबल | एक एक्स्टेंसिबल ऐरे को निश्चित आकार के ऐरे के रूप में प्रयुक्त किया जा सकता है, जिसमें काउंटर होता है जो रिकॉर्ड करता है कि वास्तव में कितने अवयव उपयोग में हैं। <code>append</code> ऑपरेशन केवल काउंटर को बढ़ाता है; जब तक पूरे ऐरे का उपयोग नहीं किया जाता है, जब <code>append</code> ऑपरेशन को विफल करने के लिए परिभाषित किया जा सकता है। यह निश्चित क्षमता के साथ गतिशील ऐरे का कार्यान्वयन है, जैसा कि <code>string</code> पास्कल का प्रकार। वैकल्पिक रूप से, <code>append</code> ऑपरेशन बड़े आकार के साथ अंतर्निहित ऐरे को फिर से आवंटित कर सकता है, और पुराने अवयव को नए क्षेत्र में प्रतिलिपि कर सकता है। | ||
== यह भी देखें == | == यह भी देखें == | ||
* [[ऐरे | * [[ऐरे एक्सेस विश्लेषण]] | ||
* [[सरणी डेटाबेस प्रबंधन प्रणाली]] | * [[सरणी डेटाबेस प्रबंधन प्रणाली|ऐरे डेटाबेस प्रबंधन प्रणाली]] | ||
* सीमा-जांच उन्मूलन | * सीमा-जांच उन्मूलन | ||
* [[सीमांकक-पृथक मान]] | * [[सीमांकक-पृथक मान]] | ||
* [[सूचकांक जाँच]] | * [[सूचकांक जाँच]] | ||
* [[समानांतर सरणी]] | * [[समानांतर सरणी|समानांतर ऐरे]] | ||
* [[विरल सरणी]] | * [[विरल सरणी|विरल ऐरे]] | ||
* [[चर-लंबाई सरणी|वेरिएबल्स-लंबाई | * [[चर-लंबाई सरणी|वेरिएबल्स-लंबाई ऐरे]] | ||
==संदर्भ== | ==संदर्भ== | ||
Line 105: | Line 105: | ||
==बाहरी संबंध== | ==बाहरी संबंध== | ||
* [https://xlinux.nist.gov/dads/HTML/array.html NIST's Dictionary of Algorithms and Data Structures: Array] | * [https://xlinux.nist.gov/dads/HTML/array.html NIST's Dictionary of Algorithms and Data Structures: Array] | ||
[[Category:Articles with hatnote templates targeting a nonexistent page]] | |||
[[Category:Collapse templates]] | |||
[[Category: | |||
[[Category:Created On 18/02/2023]] | [[Category:Created On 18/02/2023]] | ||
[[Category:Lua-based templates]] | |||
[[Category:Machine Translated Page]] | |||
[[Category:Navigational boxes| ]] | |||
[[Category:Navigational boxes without horizontal lists]] | |||
[[Category:Pages with script errors]] | |||
[[Category:Short description with empty Wikidata description]] | |||
[[Category:Sidebars with styles needing conversion]] | |||
[[Category:Template documentation pages|Documentation/doc]] | |||
[[Category:Templates Vigyan Ready]] | |||
[[Category:Templates generating microformats]] | |||
[[Category:Templates that add a tracking category]] | |||
[[Category:Templates that are not mobile friendly]] | |||
[[Category:Templates that generate short descriptions]] | |||
[[Category:Templates using TemplateData]] | |||
[[Category:Wikipedia metatemplates]] | |||
[[Category:डेटा के प्रकार]] | |||
[[Category:समग्र डेटा प्रकार]] | |||
[[Category:सारणियाँ|*]] |
Latest revision as of 15:36, 13 September 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] विशेष ऐरे प्रकार अधिकांशतः भाषा के मानक पुस्तकालय (कंप्यूटर विज्ञान) द्वारा परिभाषित किए जाते हैं।
डायनेमिक सूचियाँ भी अधिक सामान्य और प्रयुक्त करने में आसान हैं गतिशील सरणियों की तुलना में। ऐरे प्रकारों को रिकॉर्ड (कंप्यूटर विज्ञान) प्रकारों से मुख्य रूप से अलग किया जाता है क्योंकि वे पास्कल समनुदेशन ब्यान के रूप में कार्य समय (प्रोग्राम जीवनचक्र चरण) पर अवयव सूचकांकों की गणना करने की अनुमति देते हैं। A[I,J] := A[N-I,2*J]
. अन्य बातों के अतिरिक्त, यह सुविधा एकल पुनरावृत्त कथन (कंप्यूटर विज्ञान) को ऐरे वेरिएबल्स के इच्छानुसार तरह से कई अवयव को संसाधित करने की अनुमति देती है।
अधिक सैद्धांतिक संदर्भों में, विशेष रूप से प्रकार के सिद्धांत में और अमूर्त कलन विधि के विवरण में, ऐरे और ऐरे प्रकार कभी-कभी सार डेटा प्रकार (ADT) को संदर्भित करते हैं जिसे सार ऐरे भी कहा जाता है या साहचर्य ऐरे, गणित मॉडल का उल्लेख कर सकता है। अधिकांश भाषाओं में विशिष्ट ऐरे प्रकार के मूलभूतसंचालन और व्यवहार - मूल रूप से, अवयव का संग्रह जो रन-टाइम पर गणना किए गए सूचकांकों द्वारा चुना जाता है।
भाषा के आधार पर, ऐरे प्रकार अन्य डेटा प्रकारों जैसे सूची (कंप्यूटिंग) और स्ट्रिंग (कंप्यूटर विज्ञान) का वर्णन करने वाले अन्य डेटा प्रकारों को ओवरलैप (या पहचाना जा सकता है) कर सकते हैं। ऐरे प्रकार अधिकांशतः ऐरे डेटा संरचनाओं द्वारा कार्यान्वित किए जाते हैं, किन्तु कभी-कभी अन्य तरीकों से, जैसे हैश तालिका, लिंक्ड सूचियां, या ट्री खोज आदि है।
इतिहास
हेंज रूटिशॉसर की प्रोग्रामिंग भाषा सुपरप्लान (1949-1951) में बहुआयामी सरणियाँ सम्मिलित थीं। रुतिशौसर चूंकि यह वर्णन करते हुए कि उनकी भाषा के लिए संकलक कैसे बनाया जाना चाहिए,
असेंबली लैंग्वेज और लो-लेवल लैंग्वेज जैसे बीसीपीएल[4] सामान्यतः ऐरे के लिए कोई सिंटैक्टिक समर्थन नहीं होता है।
कुशल संगणना के लिए ऐरे संरचनाओं के महत्व के कारण, फोरट्रान (1957), कोबोल (1960) और अल्गोल 60 (1960) सहित सबसे प्रारंभिक उच्च-स्तरीय प्रोग्रामिंग भाषाओं ने बहु-आयामी सरणियों के लिए समर्थन प्रदान किया गया।
सार सरणियाँ
एक ऐरे डेटा संरचना को गणितीय रूप से सार डेटा संरचना (एक सार ऐरे) के रूप में दो कार्यों के साथ तैयार किया जा सकता है
- प्राप्त करें (A, I): ऐरे A के अवयव में संग्रहीत डेटा जिसका सूचकांक पूर्णांक टपल है।
- समुच्चय (A,I,V): वह ऐरे जो उस अवयव के मान को V पर समुच्चय करके परिणाम देती है।
सिद्धांतों को पूरा करने के लिए इन परिचालनों की आवश्यकता होती है[5]
- प्राप्त करें (समुच्चय (A,I, V), I) = V
- प्राप्त(समुच्चय(A,I, V), J) = प्राप्त(A, J) यदि I ≠ J
किसी भी ऐरे स्थिति A के लिए, कोई मान V, और कोई भी टपल्स I, J जिसके लिए संचालन परिभाषित हैं।
प्रथम स्वयंसिद्ध का अर्थ है कि प्रत्येक अवयव वेरिएबल्स की तरह व्यवहार करता है। दूसरे स्वयंसिद्ध का अर्थ है कि अलग-अलग सूचकांक वाले अवयव अलियासिंग (कंप्यूटिंग) वेरिएबल्स के रूप में व्यवहार करते हैं, जिससेएक अवयव में मान संग्रहीत करना किसी अन्य अवयव के मूल्य को प्रभावित न करे।
ये स्वयंसिद्ध वैध इंडेक्स ट्यूपल्स I के समुच्चय पर कोई बाधा नहीं डालते हैं, इसलिए इस सार मॉडल का उपयोग त्रिकोणीय ऐरे और अन्य अजीब आकार के सरणियों के लिए किया जा सकता है।
कार्यान्वयन
ऐरे डेटा संरचना (सूचक अंकगणित द्वारा किए गए अनुक्रमण के साथ) जैसे प्रकार के वेरिएबल्स को प्रभावी ढंग से प्रयुक्त करने के लिए, कई भाषाएँ पूर्णांक (कंप्यूटर विज्ञान) डेटा प्रकारों (या अन्य प्रकार जिन्हें पूर्णांक के रूप में व्याख्या की जा सकती हैं, जैसे बाइटस और अन्य प्रकार) के लिए सूचकांकों को प्रतिबंधित करती हैं। प्रगणित प्रकार), और आवश्यक है कि सभी अवयव का डेटा प्रकार और भंडारण आकार समान हो। उन भाषाओं में से अधिकांश प्रत्येक अनुक्रमणिका को पूर्णांकों के परिमित अंतराल (गणित) तक सीमित करती हैं, जो कि ऐरे वेरिएबल्स के पूरे जीवनकाल में स्थिर रहता है। कुछ संकलक भाषाओं में, वास्तव में, इंडेक्स रेंज को संकलन समय पर जाना जा सकता है।
दूसरी ओर, कुछ प्रोग्रामिंग लैंग्वेज अधिक उदार ऐरे प्रकार प्रदान करती हैं, जो मनमाना मूल्यों, जैसे तैरनेवाला स्थल | फ़्लोटिंग-पॉइंट नंबर, स्ट्रिंग (कंप्यूटर विज्ञान), ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग, संदर्भ (कंप्यूटर विज्ञान), आदि द्वारा अनुक्रमण की अनुमति देती हैं। इस तरह के सूचकांक मूल्यों को अंतराल तक सीमित नहीं किया जा सकता है, निश्चित अंतराल बहुत कम। इसलिए, ये भाषाएं सामान्यतः इच्छानुसार तरह से नए अवयव को किसी भी समय बनाने की अनुमति देती हैं। यह विकल्प ऐरे प्रकार के कार्यान्वयन को ऐरे डेटा संरचनाओं के रूप में रोकता है। अर्थात्, वे भाषाएँ अधिक सामान्य साहचर्य ऐरे शब्दार्थ को प्रयुक्त करने के लिए ऐरे-जैसे सिंटैक्स का उपयोग करती हैं, और इसलिए उन्हें हैश तालिका या किसी अन्य खोज डेटा संरचना द्वारा कार्यान्वित किया जाना चाहिए।
भाषा समर्थन
बहु-आयामी सरणियाँ
किसी अवयव को निर्दिष्ट करने के लिए आवश्यक सूचकांकों की संख्या को ऐरे प्रकार का आयाम, आयाम या रैंक (कंप्यूटर प्रोग्रामिंग) कहा जाता है। (यह नामकरण रेखीय बीजगणित में आयाम की अवधारणा के साथ संघर्ष करता है, जो मैट्रिक्स (गणित) # परिभाषा को व्यक्त करता है। इस प्रकार, 5 पंक्तियों और 4 स्तंभों वाली संख्याओं की ऐरे, इसलिए 20 अवयव को कंप्यूटिंग संदर्भों में आयाम 2 कहा जाता है, किन्तु एक मैट्रिक्स का प्रतिनिधित्व करता है जिसे 4 × 5-आयामी कहा जाता है। साथ ही, रैंक का कंप्यूटर विज्ञान अर्थ टेंसर रैंक की धारणा के साथ संघर्ष करता है, जो मैट्रिक्स रैंक की रैखिक बीजगणित अवधारणा का सामान्यीकरण है।)
कई भाषाएँ केवल आयामी सरणियों का समर्थन करती हैं। उन भाषाओं में, एक बहु-आयामी ऐरे को सामान्यतः Iliffe वेक्टर द्वारा दर्शाया जाता है, जो एक आयाम से कम के सरणियों के संदर्भ (कंप्यूटर विज्ञान) की एक-आयामी ऐरे है। एक द्वि-आयामी ऐरे, विशेष रूप से, इसकी पंक्तियों के पॉइंटर्स इलिफ वेक्टर के रूप में कार्यान्वित की जाएगी। इस प्रकार ऐरे A की पंक्ति i और कॉलम j में एक अवयव को डबल इंडेक्सिंग (A[i][j] विशिष्ट संकेतन में) द्वारा अभिगम किया जाएगा। बहुआयामी सरणियों का अनुकरण करने का यह विधि दांतेदार सरणियों के निर्माण की अनुमति देता है, जहां प्रत्येक पंक्ति का एक अलग आकार हो सकता है - या, सामान्यतः, जहां प्रत्येक सूचकांक की मान्य सीमा सभी पूर्ववर्ती सूचकांकों के मूल्यों पर निर्भर करती है।
बहुआयामी सरणियों के लिए यह प्रतिनिधित्व सी और सी ++ सॉफ्टवेयर में अधिक प्रचलित है। यद्यपि, सी और सी ++ बहु-आयामी सरणियों के लिए रेखीय अनुक्रमण सूत्र का उपयोग करेंगे जो संकलन समय स्थिर आकार के साथ घोषित किए गए हैं, उदा। पारंपरिक int **A
. के अतिरिक्त int A[10][20]
या int A[m][n]
, द्वारा। [6]
अनुक्रमण संकेतन
अधिकांश प्रोग्रामिंग भाषाएं जो सरणियों का समर्थन करती हैं, स्टोर का समर्थन करती हैं और संचालन का चयन करती हैं, और अनुक्रमण के लिए विशेष सिंटैक्स होता है। प्रारंभिक भाषाओं में कोष्ठकों का प्रयोग किया जाता था, उदा. A(i,j)
, फोरट्रान के रूप में; अन्य वर्ग कोष्ठक चुनते हैं, उदा। A[i,j]
या A[i][j]
, जैसा कि एल्गोल 60 और पास्कल में है (फलन कॉल के लिए कोष्ठकों के उपयोग से अलग करने के लिए)।
सूचकांक प्रकार
ऐरे डेटा प्रकारों को अधिकांशतः ऐरे संरचनाओं के रूप में प्रयुक्त किया जाता है: पूर्णांक (या पूरी तरह से आदेशित) मानों तक सीमित सूचकांकों के साथ, ऐरे निर्माण समय पर तय की गई अनुक्रमणिका श्रेणियां, और बहु-रेखीय अवयव एड्रेसिंग। अधिकांश तीसरी पीढ़ी की प्रोग्रामिंग भाषा में यही स्थिति थी| तीसरी पीढ़ी की भाषाएँ, और अभी भी अधिकांश प्रणाली प्रोग्रामिंग भाषाओं जैसे एडा (प्रोग्रामिंग भाषा), सी प्रोग्रामिंग भाषा और सी ++ का मामला है। यद्यपि, कुछ भाषाओं में, ऐरे डेटा प्रकारों में साहचर्य सरणियों के शब्दार्थ होते हैं, जिनमें मनमाना प्रकार और गतिशील अवयव निर्माण के सूचकांक होते हैं। यह कुछ स्क्रिप्टिंग भाषाओं जैसे एडब्लूके प्रोग्रामिंग लैंग्वेज और लुआ (प्रोग्रामिंग लैंग्वेज) और मानक सी ++ लाइब्रेरी द्वारा प्रदान किए गए कुछ ऐरे प्रकारों में होता है।
सीमा जाँच
कुछ भाषाएं (जैसे पास्कल और मोडुला) हर अभिगम पर सीमा जाँच करती हैं, अपवाद (कंप्यूटर साइंस) उठाती हैं या किसी इंडेक्स के वैध सीमा से बाहर होने पर प्रोग्राम को रद्द कर देती हैं। गति के लिए व्यापार सुरक्षा के लिए संकलक इन चेकों को बंद करने की अनुमति दे सकते हैं। अन्य भाषाएँ (जैसे फोरट्रान और सी) प्रोग्रामर पर भरोसा करती हैं और कोई जाँच नहीं करती हैं। अच्छे संकलक सूचकांक के संभावित मूल्यों की सीमा निर्धारित करने के लिए प्रोग्राम का विश्लेषण भी कर सकते हैं, और इस विश्लेषण से सीमा-जाँच समाप्त हो सकती है।
सूचकांक उत्पत्ति
कुछ भाषाएं, जैसे सी, केवल शून्य-आधारित नंबरिंग|शून्य-आधारित ऐरे प्रकार प्रदान करती हैं, जिसके लिए किसी भी इंडेक्स के लिए न्यूनतम मान्य मान 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 बार।
उच्चतम सूचकांक
एक ऐरे घोषणा में दिखाई देने वाली संख्याओं और उस ऐरे के अंतिम अवयव की अनुक्रमणिका के बीच का संबंध भी भाषा के अनुसार भिन्न होता है। कई भाषाओं में (जैसे सी), किसी को ऐरे में निहित अवयव की संख्या निर्दिष्ट करनी चाहिए; जबकि अन्य में (जैसे पास्कल और विज़ुअल बेसिक .नेट) अंतिम अवयव के सूचकांक के संख्यात्मक मान को निर्दिष्ट करना चाहिए। कहने की आवश्यकता नहीं है, यह भेद उन भाषाओं में महत्वहीन है जहां सूचकांक 1 से प्रारंभिक होते हैं, जैसे लुआ (प्रोग्रामिंग भाषा)।
ऐरे बीजगणित
कुछ प्रोग्रामिंग लैंग्वेज ऐरे प्रोग्रामिंग को सपोर्ट करती हैं, जहां कुछ डेटा टाइप्स के लिए परिभाषित ऑपरेशंस और फंक्शन्स को उन टाइप्स के एलिमेंट्स के ऐरे तक बढ़ाया जाता है। इस प्रकार दो सरणियों A और B के संबंधित अवयव को जोड़ने के लिए A+B लिख सकते हैं। सामान्यतः ये भाषाएँ हैडमार्ड उत्पाद (मैट्रिसेस) | अवयव-दर-अवयव गुणन और रैखिक बीजगणित के मानक डॉट उत्पाद दोनों प्रदान करती हैं, और इनमें से कौन सा है * ऑपरेटर द्वारा प्रस्तुत भाषा के अनुसार भिन्न होता है।
एपीएल प्रोग्रामिंग भाषा के इस क्षेत्र में नवाचारों के बाद से ऐरे प्रोग्रामिंग क्षमताओं को प्रदान करने वाली भाषाओं का प्रसार हुआ है। ये डोमेन-विशिष्ट भाषाओं की मुख्य क्षमताएँ हैं जैसे गॉस (प्रोग्रामिंग लैंग्वेज), इंटरएक्टिव डेटा भाषा, मैटलैब और मेथेमेटिका वे जूलिया (प्रोग्रामिंग भाषा) और फोरट्रान के हाल के संस्करणों जैसी नई भाषाओं में मुख्य सुविधा हैं। ये क्षमताएं अन्य सामान्य प्रयोजन प्रोग्रामिंग भाषाओं के लिए मानक विस्तार पुस्तकालयों के माध्यम से भी प्रदान की जाती हैं (जैसे कि पायथन (प्रोग्रामिंग भाषा) के लिए व्यापक रूप से उपयोग की जाने वाली न्यूमपी लाइब्रेरी)।
स्ट्रिंग प्रकार और सरणियाँ
कई भाषाएं उस प्रकार के मूल्यों को बनाने के लिए विशेष अंकन (स्ट्रिंग शाब्दिक) के साथ अंतर्निहित शाब्दिक स्ट्रिंगकंप्यूटर विज्ञान) डेटा प्रकार प्रदान करती हैं। कुछ भाषाओं में (जैसे सी), स्ट्रिंग केवल वर्णों की ऐरे है, या उसी तरह से नियंत्रित की जाती है। अन्य भाषाएँ, जैसे पास्कल प्रोग्रामिंग भाषा, स्ट्रिंग्स और सरणियों के लिए बहुत भिन्न संचालन प्रदान कर सकती हैं।
ऐरे अनुक्रमणिका श्रेणी प्रश्न
कुछ प्रोग्रामिंग लैंग्वेज ऐसे ऑपरेशन प्रदान करती हैं जो सदिश के आकार (अवयव की संख्या) को लौटाते हैं, या अधिक सामान्यतः, ऐरे के प्रत्येक सूचकांक की सीमा। सी (प्रोग्रामिंग लैंग्वेज) और सी ++ सरणियाँ आकार फ़ंक्शन का समर्थन नहीं करती हैं, इसलिए प्रोग्रामर को अधिकांशतः आकार को धारण करने के लिए अलग वेरिएबल्स घोषित करना पड़ता है, और इसे एक अलग पैरामीटर के रूप में प्रक्रियाओं में पास करना पड़ता है।
नव निर्मित ऐरे के अवयव में अपरिभाषित मान हो सकते हैं (जैसा कि सी में), या विशिष्ट डिफ़ॉल्ट मान जैसे 0 या शून्य सूचक (जावा में) के रूप में परिभाषित किया जा सकता है।
सी ++ में एसटीडी :: वेक्टर ऑब्जेक्ट स्टोर का समर्थन करता है, ऊपर चर्चा की गई प्रदर्शन विशेषताओं के साथ संचालन का चयन करता है और जोड़ता है। वैक्टर को उनके आकार के लिए पूछा जा सकता है और उनका आकार बदला जा सकता है। बीच में अवयव डालने जैसे धीमे संचालन भी समर्थित हैं।
स्लाइसिंग
एक ऐरे भाग करना ऑपरेशन ऐरे-टाइप की गई इकाई (मान या वेरिएबल्स) के अवयव का उपसमुच्चय लेता है और फिर उन्हें अन्य ऐरे-टाइप की गई इकाई के रूप में इकट्ठा करता है, संभवतः अन्य सूचकांकों के साथ। यदि ऐरे प्रकारों को ऐरे संरचनाओं के रूप में कार्यान्वित किया जाता है, तो संरचना के डोप वेक्टर में हेरफेर करके कई उपयोगी स्लाइसिंग ऑपरेशंस (जैसे कि उप-ऐरे का चयन करना, सूचकांकों की अदला-बदली करना या सूचकांकों की दिशा को उलटना) बहुत कुशलता से किया जा सकता है। संभावित स्लाइसिंग कार्यान्वयन विवरण पर निर्भर करती है: उदाहरण के लिए, फोरट्रान मैट्रिक्स वेरिएबल्स के एक कॉलम को स्लाइस करने की अनुमति देता है, किन्तु एक पंक्ति नहीं, और इसे वेक्टर के रूप में मानता है; जबकि सी मैट्रिक्स से पंक्ति को भाग करने की अनुमति देता है, किन्तु एक स्तंभ नहीं है।
दूसरी तरफ, अन्य स्लाइसिंग ऑपरेशंस संभव होते हैं जब ऐरे प्रकार अन्य तरीकों से प्रयुक्त होते हैं।
आकार बदलना
कुछ भाषाएँ डायनेमिक सरणियों की अनुमति देती हैं (जिन्हें आकार बदलने योग्य, बढ़ने योग्य या एक्स्टेंसिबल भी कहा जाता है): ऐरे वेरिएबल्स जिनकी इंडेक्स रेंज को इसके वर्तमान अवयव के मूल्यों को बदले बिना, निर्माण के बाद किसी भी समय विस्तारित किया जा सकता है।
एक आयामी सरणियों के लिए, यह सुविधा ऑपरेशन के रूप में प्रदान की जा सकती हैappend
(A,x) जो ऐरे A के आकार को एक से बढ़ाता है और फिर अंतिम अवयव का मान एक्स पर समुच्चय करता है। अन्य ऐरे प्रकार (जैसे पास्कल स्ट्रिंग्स) संयोजन संचालिका प्रदान करते हैं, जिसका उपयोग स्लाइसिंग के साथ मिलकर उस प्रभाव को प्राप्त करने के लिए किया जा सकता है। कुछ भाषाओं में, किसी ऐरे के किसी अवयव को मान निर्दिष्ट करने से उस अवयव को सम्मिलित करने के लिए, यदि आवश्यक हो, तो स्वचालित रूप से ऐरे का विस्तार हो जाता है। अन्य ऐरे प्रकारों में, एक स्लाइस को अलग-अलग आकार की एक ऐरे द्वारा प्रतिस्थापित किया जा सकता है, जिसके बाद के अवयव को तदनुसार फिर से क्रमांकित किया जा सकता है - जैसा कि पायथन की सूची असाइनमेंट में A[5:5] = [10,20,30] है, जो तीन नए अवयव को सम्मिलित करता है ( 10,20, और 30) अवयव A [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"