ऐरे (डेटा स्ट्रक्चर): Difference between revisions

From Vigyanwiki
No edit summary
 
(6 intermediate revisions by 5 users not shown)
Line 1: Line 1:
{{short description|Type of data structure}}
{{short description|Type of data structure}}
{{About|the byte-layout-level structure|the [[abstract data type]]|Array data type|other types of arrays|Array}}
[[File:The NumPy array data structure and its associated metadata fields.webp|alt=Array (data structure)|thumb|Array (data structure)]]
{{Use dmy dates|date=November 2020}}
{{More citations needed|date=September 2008}}
[[ कंप्यूटर विज्ञान ]] में, एक सरणी एक [[ डेटा संरचना ]] होती है जिसमें ''तत्वों'' ([[ मूल्य (कंप्यूटर विज्ञान) ]] या [[ चर (प्रोग्रामिंग) ]]) का संग्रह होता है, प्रत्येक को कम से कम एक ''सरणी अनुक्रमणिका'' या ''कुंजी' द्वारा पहचाना जाता है। '। एक सरणी को इस तरह संग्रहीत किया जाता है कि प्रत्येक तत्व की स्थिति की गणना उसके सूचकांक [[ टपल ]] से एक गणितीय सूत्र द्वारा की जा सकती है।<ref>{{cite web|url=https://xlinux.nist.gov/dads/HTML/सरणी.html|title=सरणी|last=Black|first=Paul E.|date=13 November 2008|work=[[Dictionary of Algorithms and Data Structures]]|publisher=[[National Institute of Standards and Technology]]|access-date=22 August 2010}}</ref><ref name="andres">{{cite arXiv |eprint=1008.2909 |author1=Bjoern Andres |author2=Ullrich Koethe |author3=Thorben Kroeger |author4=Hamprecht |title=C++98 और C++0x . के लिए रनटाइम-लचीले बहु-आयामी सरणी और दृश्य|class=cs.DS |year=2010}}</ref><ref name="garcia">{{Cite journal|last1=Garcia|first1=Ronald |first2=Andrew |last2=Lumsdaine|year=2005|title=मल्टीएरे: सरणियों के साथ सामान्य प्रोग्रामिंग के लिए एक सी ++ पुस्तकालय|journal=Software: Practice and Experience|volume=35|issue=2|pages=159–188|issn=0038-0644|doi=10.1002/spe.630|s2cid=10890293 }}</ref> डेटा संरचना का सबसे सरल प्रकार एक रेखीय सरणी है, जिसे एक-आयामी सरणी भी कहा जाता है।


उदाहरण के लिए, दस [[ 32-बिट ]] (4-बाइट) पूर्णांक चरों की एक सरणी, 0 से 9 के सूचकांकों के साथ, स्मृति पते 2000, 2004, 2008, ..., 2036, पर दस वर्ड (डेटा प्रकार) के रूप में संग्रहीत किया जा सकता है। [[ हेक्साडेसिमल ]] में: <code>0x7D0</code>, <code>0x7D4</code>, <code>0x7D8</code>, ..., <code>0x7F4</code>) ताकि इंडेक्स वाले तत्व का पता 2000 + (i × 4) हो।<ref>David R. Richardson (2002), The Book on Data Structures. iUniverse, 112 pages. {{ISBN|0-595-24039-9}}, {{ISBN|978-0-595-24039-5}}.</ref>
किसी ऐरे के पहले एलिमेंट के मेमोरी एड्रेस को फर्स्ट एड्रेस, फाउंडेशन एड्रेस या बेस एड्रेस कहा जाता है।


चूंकि [[ मैट्रिक्स (गणित) ]] की गणितीय अवधारणा को दो-आयामी ग्रिड के रूप में दर्शाया जा सकता है, दो-आयामी सरणी को कभी-कभी मैट्रिक्स भी कहा जाता है। कुछ मामलों में वेक्टर शब्द का उपयोग किसी सरणी को संदर्भित करने के लिए कंप्यूटिंग में किया जाता है, हालांकि [[ सदिश स्थल ]] के बजाय टुपल्स अधिक गणितीय रूप से सही समकक्ष होते हैं। तालिका (सूचना) को अक्सर सरणियों के रूप में लागू किया जाता है, विशेष रूप से [[ खोज तालिका ]]; शब्द तालिका को कभी-कभी सरणी के पर्याय के रूप में प्रयोग किया जाता है।
[[:hi:कम्प्यूटर विज्ञान|कंप्यूटर विज्ञान]] में, '''सरणी (ऐरे)''' एक [[डेटा संरचना है]] जिसमें अवयव ([[:hi:मूल्य (कंप्यूटर विज्ञान)|वैल्यूज]] या [[:hi:चर (प्रोग्रामिंग)|वेरिएबल्स]]) का संग्रह होता है, प्रत्येक को कम से कम एक ''ऐरे अनुक्रमणिका'' या ''कुंजी'' द्वारा पहचाना जाता है। एक ऐरे को इस तरह संग्रहीत किया जाता है कि प्रत्येक तत्व की स्थिति की गणना उसके सूचकांक [[:hi:टपल|टपल]] से गणितीय सूत्र द्वारा की जा सकती है।<ref>{{Cite web|url=https://xlinux.nist.gov/dads/HTML/array.html|title=array|last=Black|first=Paul E.|date=13 November 2008|website=[[Dictionary of Algorithms and Data Structures]]|publisher=[[National Institute of Standards and Technology]]|access-date=22 August 2010}}</ref> <ref name="andres2">{{Cite arXiv|arxiv=1008.2909|author=Bjoern Andres|author2=Ullrich Koethe|title=Runtime-Flexible Multi-dimensional Arrays and Views for C++98 and C++0x|class=cs.DS}}</ref> <ref name="garcia2">{{Cite journal|last=Garcia|first=Ronald|first2=Andrew|last2=Lumsdaine|year=2005|title=MultiArray: a C++ library for generic programming with arrays|journal=Software: Practice and Experience|volume=35|issue=2|pages=159–188|issn=0038-0644|doi=10.1002/spe.630}}</ref> सबसे सरल प्रकार की डेटा संरचना एक रेखीय ऐरे है, जिसे एक-आयामी ऐरे भी कहा जाता है।


Arrays सबसे पुरानी और सबसे महत्वपूर्ण डेटा संरचनाओं में से हैं, और लगभग हर प्रोग्राम द्वारा उपयोग की जाती हैं। उनका उपयोग कई अन्य डेटा संरचनाओं, जैसे [[ सूची (कंप्यूटिंग) ]] और [[ स्ट्रिंग (कंप्यूटर विज्ञान) ]] को लागू करने के लिए भी किया जाता है। वे कंप्यूटर के एड्रेसिंग लॉजिक का प्रभावी ढंग से फायदा उठाते हैं। अधिकांश आधुनिक कंप्यूटरों और कई बाहरी भंडारण उपकरणों में, मेमोरी शब्दों की एक आयामी सरणी होती है, जिसके सूचकांक उनके पते होते हैं। [[ सेंट्रल प्रोसेसिंग यूनिट ]], विशेष रूप से [[ वेक्टर प्रोसेसर ]], अक्सर सरणी संचालन के लिए अनुकूलित होते हैं।
उदाहरण के लिए, दस [[:hi:32-बिट|32-बिट]] (4-बाइट) पूर्णांक चर की एक ऐरे, 0 से 9 के सूचकांक के साथ, मेमोरी एड्रेस 2000, 2004, 2008, ..., 2036, ([[:hi:षोडश आधारी|हेक्साडेसिमल]] में: <code>0x7D0</code> ) पर दस शब्दों के रूप में संग्रहीत की जा सकती है। <code>0x7D4</code>, <code>0x7D8</code>, ..., <code>0x7F4</code> ) ताकि सूचकांक वाले तत्व का एड्रेस 2000 + ''(i'' ''×'' 4) हो।<ref>David R. Richardson (2002), The Book on Data Structures. iUniverse, 112 pages. {{ISBN|0-595-24039-9}}, {{ISBN|978-0-595-24039-5}}.</ref> किसी ऐरे के पहले तत्व के मेमोरी एड्रेस को फर्स्ट एड्रेस, फाउंडेशन एड्रेस या बेस एड्रेस कहा जाता है।


एरे ज्यादातर उपयोगी होते हैं क्योंकि तत्व सूचकांकों की गणना [[ रन टाइम (कार्यक्रम जीवनचक्र चरण) ]] पर की जा सकती है। अन्य बातों के अलावा, यह सुविधा एक एकल पुनरावृत्त कथन (प्रोग्रामिंग) को एक सरणी के कई तत्वों को मनमाने ढंग से संसाधित करने की अनुमति देती है। इस कारण से, एक सरणी डेटा संरचना के तत्वों का आकार समान होना आवश्यक है और उन्हें समान डेटा प्रतिनिधित्व का उपयोग करना चाहिए। मान्य इंडेक्स टुपल्स का सेट और तत्वों के पते (और इसलिए एलिमेंट एड्रेसिंग फॉर्मूला) आमतौर पर होते हैं,<ref name="garcia" /><ref name="veldhuizen">{{cite conference|first1=Todd L.|last1=Veldhuizen|title=ब्लिट्ज ++ में सरणी|url=http://ubietylab.net/ubigraph/content/Papers/pdf/BlitzArrays.pdf|publisher=Springer Berlin Heidelberg|conference=Computing in Object-Oriented Parallel Environments|date=December 1998|isbn=978-3-540-65387-5|pages=223–230|series=Lecture Notes in Computer Science|volume=1505|doi=10.1007/3-540-49372-7_24|archive-url=https://web.archive.org/web/20161109102542/http://ubietylab.net/ubigraph/content/Papers/pdf/BlitzArrays.pdf|archive-date=9 November 2016|url-status=dead}}</ref> लेकिन हमेशा नहीं,<ref name="andres" />सरणी उपयोग में होने पर निश्चित।
क्योंकि एक [[:hi:आव्यूह|मैट्रिक्स]] की गणितीय अवधारणा को दो-आयामी ग्रिड के रूप में दर्शाया जा सकता है, द्वि-आयामी सरणियों को कभी-कभी "मैट्रिसेस" भी कहा जाता है। कुछ मामलों में "वेक्टर" शब्द का उपयोग एक ऐरे को संदर्भित करने के लिए कंप्यूटिंग में किया जाता है, हालांकि [[:hi:सदिश बीजगणित|वैक्टर]] के बजाय [[:hi:टपल|ट्यूपल्स]] अधिक गणितीय रूप से सही समतुल्य हैं। [[:hi:सारणी|टेबल्स]] को प्रायःसरणियों के रूप में कार्यान्वित किया जाता है, विशेष रूप से [[लुकअप टेबल]], शब्द "टेबल" को कभी-कभी ऐरे के पर्याय के रूप में प्रयोग किया जाता है।


शब्द सरणी एक [[ सरणी [[ डेटा प्रकार ]] ]] को भी संदर्भित कर सकता है, एक प्रकार का डेटा प्रकार जो अधिकांश उच्च-स्तरीय प्रोग्रामिंग भाषाओं द्वारा प्रदान किया जाता है जिसमें मूल्यों या चर का संग्रह होता है जिसे रन-टाइम पर गणना किए गए एक या अधिक सूचकांकों द्वारा चुना जा सकता है। सरणी प्रकार अक्सर सरणी संरचनाओं द्वारा कार्यान्वित किए जाते हैं; हालांकि, कुछ भाषाओं में उन्हें [[ हैश टेबल ]], [[ लिंक्ड सूची ]], [[ खोज वृक्ष ]] या अन्य डेटा स्ट्रक्चर द्वारा लागू किया जा सकता है।
ऐरे सबसे पुरानी और सबसे महत्वपूर्ण डेटा संरचनाओं में से हैं, और लगभग हर प्रोग्राम द्वारा उपयोग की जाती हैं। उनका उपयोग कई अन्य डेटा संरचनाओं, जैसे [[सूचियों]] और [[:hi:स्ट्रिंग (संगणन)|स्ट्रिंग्स]] को लागू करने के लिए भी किया जाता है। वे कंप्यूटर के एड्रेसिंग लॉजिक का प्रभावी ढंग से दोहन करते हैं। अधिकांश आधुनिक कंप्यूटरों और कई [[बाहरी भंडारण]] उपकरणों में, मेमोरी शब्दों का एक आयामी ऐरे है, जिसका सूचक उनके एड्रेस हैं। [[:hi:सेंट्रल प्रोसेसिंग यूनिट|प्रोसेसर]], विशेष रूप से [[:hi:वेक्टर प्रोसेसर|वेक्टर प्रोसेसर]], प्रायःऐरे संचालन के लिए अनुकूलित होते हैं।


शब्द का प्रयोग विशेष रूप से [[ कलन विधि ]] के विवरण में भी किया जाता है, जिसका अर्थ है साहचर्य सरणी या अमूर्त सरणी, एक [[ सैद्धांतिक कंप्यूटर विज्ञान ]] मॉडल (एक [[ सार डेटा प्रकार ]] या एडीटी) जिसका उद्देश्य सरणियों के आवश्यक गुणों को पकड़ना है।
ऐरे अधिकतर उपयोगी होते हैं क्योंकि एलीमेंट इंडेक्स की गणना रन टाइम पर की जा सकती है। अन्य बातों के अलावा, यह सुविधा एकल पुनरावृत्त [[:hi:बयान (प्रोग्रामिंग)|कथन]] को किसी ऐरे के मनमाने ढंग से कई तत्वों को संसाधित करने की अनुमति देती है। इस कारण से, एक ऐरे डेटा संरचना के तत्वों का आकार समान होना आवश्यक है और उन्हें समान डेटा प्रतिनिधित्व का उपयोग करना चाहिए। वैध सूचकांक टुपल्स का सेट और तत्वों के एड्रेस (और इसलिए तत्व को संबोधित करने वाले सूत्र) सामान्यतः,<ref name="garcia3">{{Cite journal|last=Garcia|first=Ronald|first2=Andrew|last2=Lumsdaine|year=2005|title=MultiArray: a C++ library for generic programming with arrays|journal=Software: Practice and Experience|volume=35|issue=2|pages=159–188|issn=0038-0644|doi=10.1002/spe.630}}</ref> <ref name="veldhuizen2">{{Cite conference|accessdate=9 November 2016}}</ref> होते हैं, लेकिन सदैव नहीं, <ref name="andres3">{{Cite arXiv|arxiv=1008.2909|author=Bjoern Andres|author2=Ullrich Koethe|title=Runtime-Flexible Multi-dimensional Arrays and Views for C++98 and C++0x|class=cs.DS}}</ref> निश्चित होते हैं जबकि ऐरे उपयोग में होती है।
 
शब्द "ऐरे" एक [[सरणी डेटा प्रकार|ऐरे डेटा प्रकार]] को भी संदर्भित कर सकता है, एक प्रकार का [[डेटा प्रकार]] जो अधिकांश [[उच्च-स्तरीय प्रोग्रामिंग भाषाओं]] द्वारा प्रदान किया जाता है जिसमें मानों या चर का एक संग्रह होता है जिसे रन-टाइम पर गणना किए गए एक या अधिक सूचकांकों द्वारा चुना जा सकता है। ऐरे प्रकार प्रायःऐरे संरचनाओं द्वारा कार्यान्वित किए जाते हैं; हालाँकि, कुछ भाषाओं में उन्हें [[:hi:हैश टेबल|हैश टेबल]], [[:hi:लिंक्ड सूची|लिंक्ड लिस्ट]], [[:hi:खोज पेड़|सर्च ट्री]] या अन्य डेटा संरचनाओं द्वारा लागू किया जा सकता है।
 
इस शब्द का प्रयोग विशेष रूप से [[:hi:अल्गोरिद्म|एल्गोरिदम]] के वर्णन में भी किया जाता है, जिसका अर्थ सहयोगी ऐरे या "अमूर्त ऐरे" है, एक [[सैद्धांतिक कंप्यूटर विज्ञान]] मॉडल (एक सार डेटा प्रकार या एडीटी) जिसका उद्देश्य ऐरे के आवश्यक गुणों को पकड़ना है।


==इतिहास==
==इतिहास==
पहले डिजिटल कंप्यूटरों ने डेटा टेबल, वेक्टर और मैट्रिक्स कंप्यूटेशंस, और कई अन्य उद्देश्यों के लिए सरणी संरचनाओं को स्थापित करने और एक्सेस करने के लिए मशीन-भाषा प्रोग्रामिंग का उपयोग किया। [[ जॉन वॉन न्यूमैन ]] ने ईडीवीएसी के निर्माण के दौरान 1945 में पहला एरे-सॉर्टिंग प्रोग्राम ([[ मर्ज़ सॉर्ट ]]) लिखा था। पहला संग्रहीत-प्रोग्राम कंप्यूटर।<ref>Donald Knuth, ''[[The Art of Computer Programming]]'', vol. 3. Addison-Wesley</ref><sup>पी। 159</sup> सरणी अनुक्रमण मूल रूप से [[ स्व-संशोधित कोड ]] द्वारा किया गया था, और बाद में अनुक्रमणिका रजिस्टरों और [[ एड्रेसिंग मोड ]] का उपयोग करके किया गया था। 1960 के दशक में डिज़ाइन किए गए कुछ मेनफ्रेम, जैसे कि [[ बरोज़ बड़े सिस्टम ]] और इसके उत्तराधिकारी, हार्डवेयर में इंडेक्स-बाउंड चेकिंग करने के लिए [[ स्मृति विभाजन ]] का उपयोग करते थे।<ref>{{citation|title=Capability-based Computer Systems|first=Henry M.|last=Levy|publisher=Digital Press|year=1984|isbn=9780932376220|page=22}}.</ref>
पहले डिजिटल कंप्यूटरों ने डेटा टेबल, वेक्टर और मैट्रिक्स कंप्यूटेशंस और कई अन्य उद्देश्यों के लिए ऐरे संरचनाओं को सेट अप और एक्सेस करने के लिए मशीन-भाषा प्रोग्रामिंग का इस्तेमाल किया। जॉन वॉन न्यूमैन ने 1945 में पहले स्टोर्ड-प्रोग्राम कंप्यूटर के निर्माण के दौरान पहला एरे-सॉर्टिंग प्रोग्राम (मर्ज सॉर्ट) लिखा था। <ref>Donald Knuth, ''[[The Art of Computer Programming]]'', vol. 3. Addison-Wesley</ref> <sup>पृ.&nbsp;159</sup> ऐरे इंडेक्सिंग मूल रूप से स्व-संशोधित कोड द्वारा किया गया था, और बाद में [[इंडेक्स रजिस्टरों]] और [[अप्रत्यक्ष एड्रेसिंग]] का उपयोग करके किया गया था। 1960 के दशक में डिज़ाइन किए गए कुछ मेनफ्रेम, जैसे [[बरोज़ B5000]] और इसके उत्तराधिकारी, हार्डवेयर में इंडेक्स-बाउंड जाँच करने के लिए [[:hi:स्मृति विभाजन|मेमोरी सेगमेंटेशन]] का उपयोग करते थे।<ref>{{Citation|title=Capability-based Computer Systems|first=Henry M.|last=Levy|publisher=Digital Press|year=1984|isbn=9780932376220|page=22}}.</ref>
असेंबली भाषाओं में आमतौर पर मशीन द्वारा प्रदान की जाने वाली चीज़ों के अलावा, सरणियों के लिए कोई विशेष समर्थन नहीं होता है। [[ फोरट्रान ]] (1957), [[ लिस्प (प्रोग्रामिंग भाषा) ]] (1958), [[ COBOL ]] (1960), और [[ ALGOL ]] (1960) सहित शुरुआती उच्च-स्तरीय प्रोग्रामिंग भाषाओं में बहु-आयामी सरणियों के लिए समर्थन था, और इसलिए C (प्रोग्रामिंग भाषा) है। (1972)। [[ C++ ]] (1983) में, बहु-आयामी सरणियों के लिए क्लास टेम्प्लेट मौजूद हैं, जिनका आयाम रनटाइम पर तय होता है<ref name="garcia" /><ref name="veldhuizen" />साथ ही रनटाइम-लचीले सरणियों के लिए।<ref name="andres" />


असेम्बली भाषाओं में आम तौर पर सरणियों के लिए कोई विशेष समर्थन नहीं होता है, सिवाय इसके कि मशीन स्वयं क्या प्रदान करती है। [[:hi:फ़ोरट्रान|फोरट्रान]] (1957), [[:hi:लिस्प (प्रोग्रामिंग भाषा)|लिस्प]] (1958), [[:hi:कोबोल|COBOL]] (1960), और ALGOL 60 (1960) सहित शुरुआती उच्च-स्तरीय प्रोग्रामिंग भाषाओं में बहु-आयामी सरणियों के लिए समर्थन था, और इसलिए [[:hi:सी (प्रोग्रामिंग भाषा)|C]] (1972) है। [[:hi:सी++|C++]] (1983) में, बहु-आयामी सरणियों के लिए वर्ग टेम्पलेट मौजूद हैं जिनके आयाम रनटाइम<ref name="garcia4">{{Cite journal|last=Garcia|first=Ronald|first2=Andrew|last2=Lumsdaine|year=2005|title=MultiArray: a C++ library for generic programming with arrays|journal=Software: Practice and Experience|volume=35|issue=2|pages=159–188|issn=0038-0644|doi=10.1002/spe.630}}</ref> <ref name="veldhuizen3">{{Cite conference|accessdate=9 November 2016}}</ref> के साथ-साथ रनटाइम-फ्लेक्सिबल सरणियों के लिए तय किए गए हैं।<ref name="andres4">{{Cite arXiv|arxiv=1008.2909|author=Bjoern Andres|author2=Ullrich Koethe|title=Runtime-Flexible Multi-dimensional Arrays and Views for C++98 and C++0x|class=cs.DS}}</ref>


== आवेदन ==
== अनुप्रयोग ==
एरेज़ का उपयोग गणितीय समन्वय वेक्टर और मैट्रिक्स (गणित), साथ ही साथ अन्य प्रकार के आयताकार तालिकाओं को लागू करने के लिए किया जाता है। कई [[ डेटाबेस ]], छोटे और बड़े, एक-आयामी सरणियों से युक्त (या शामिल) होते हैं जिनके तत्व [[ रिकॉर्ड (कंप्यूटर विज्ञान) ]] होते हैं।
ऐरे का उपयोग गणितीय वैक्टर और [[मैट्रिसेस]] के साथ-साथ अन्य प्रकार की आयताकार तालिकाओं को लागू करने के लिए किया जाता है। कई [[:hi:डेटाबेस|डेटाबेस]], छोटे और बड़े, एक-आयामी सरणियों से युक्त या सम्मिलित होते हैं जिनके तत्व रिकॉर्ड होते हैं।


अन्य डेटा संरचनाओं को लागू करने के लिए Arrays का उपयोग किया जाता है, जैसे कि सूचियाँ, हीप (डेटा संरचना), हैश टेबल, [[ डबल-एंडेड कतार ]], [[ कतार (डेटा संरचना) ]], [[ स्टैक (डेटा संरचना) ]], स्ट्रिंग (कंप्यूटर विज्ञान), और VLists। अन्य डेटा संरचनाओं के ऐरे-आधारित कार्यान्वयन अक्सर सरल और अंतरिक्ष-कुशल (अंतर्[[ निहित डेटा संरचना ]]एं) होते हैं, जिनके लिए बहुत कम जगह [[ ओवरहेड (कंप्यूटिंग) ]] की आवश्यकता होती है, लेकिन खराब स्थान जटिलता हो सकती है, खासकर जब पेड़-आधारित डेटा संरचनाओं की तुलना में संशोधित किया जाता है। एक खोज पेड़ के लिए [[ क्रमबद्ध सरणी ]])।
अन्य डेटा संरचनाओं को लागू करने के लिए Arrays का उपयोग किया जाता है, जैसे कि सूचियाँ, [[:hi:हीप|हीप]], [[:hi:हैश टेबल|हैश टेबल]], [[:hi:डबल-एंडेड कतार|डेक]], [[:hi:कतार (डेटा संरचना)|क्यूएस]], [[:hi:ढेर (सार जानकारी प्रकार)|स्टॉक्स]], [[:hi:स्ट्रिंग (संगणन)|स्ट्रिंग्स]] और [[वी लिस्ट]]। अन्य डेटा संरचनाओं के ऐरे-आधारित कार्यान्वयन प्रायःसरल और अंतरिक्ष-कुशल ( निहित डेटा संरचनाएं ) होते हैं, जिनके लिए बहुत कम जगह की आवश्यकता होती [[:hi:ओवरहेड (कंप्यूटिंग)|है]], लेकिन ट्री-आधारित डेटा संरचनाओं की तुलना में खराब स्थान जटिलता हो सकती है, खासकर जब संशोधित हो (क्रमबद्ध ऐरे की तुलना एक सर्च ट्री से करें)।


एक या अधिक बड़े सरणियों का उपयोग कभी-कभी इन-प्रोग्राम डायनेमिक मेमोरी आवंटन, विशेष रूप से [[ मेमोरी पूल ]] आवंटन का अनुकरण करने के लिए किया जाता है। ऐतिहासिक रूप से, यह कभी-कभी गतिशील स्मृति को पोर्टेबल रूप से आवंटित करने का एकमात्र तरीका रहा है।
एक या अधिक बड़े सरणियों का उपयोग कभी-कभी इन-प्रोग्राम [[डायनेमिक मेमोरी आवंटन]], विशेष रूप से [[:hi:मेमोरी पूल|मेमोरी पूल]] आवंटन का अनुकरण करने के लिए किया जाता है। ऐतिहासिक रूप से, यह कभी-कभी "गतिशील मेमोरी" को आंशिक रूप से आवंटित करने का एकमात्र तरीका रहा है।


कार्यक्रमों में आंशिक या पूर्ण नियंत्रण प्रवाह निर्धारित करने के लिए सरणी का उपयोग किया जा सकता है, (अन्यथा दोहराए जाने वाले) एकाधिक के कॉम्पैक्ट विकल्प के रूप में <code>IF</code> बयान। वे इस संदर्भ में [[ नियंत्रण तालिका ]]ओं के रूप में जाने जाते हैं और एक उद्देश्य से निर्मित दुभाषिया के संयोजन के साथ उपयोग किया जाता है जिसका नियंत्रण प्रवाह सरणी में निहित मूल्यों के अनुसार बदल जाता है। सरणी में [[ सबरूटीन ]] पॉइंटर (कंप्यूटर प्रोग्रामिंग) (या सापेक्ष सबरूटीन नंबर हो सकते हैं जिन पर [[ स्विच स्टेटमेंट ]] स्टेटमेंट द्वारा कार्रवाई की जा सकती है) जो निष्पादन के पथ को निर्देशित करते हैं।
कार्यक्रमों में आंशिक या पूर्ण [[नियंत्रण प्रवाह]] को निर्धारित करने के लिए ऐरे का उपयोग किया जा सकता है, एक कॉम्पैक्ट विकल्प के रूप में (अन्यथा दोहरावदार) एकाधिक <code>IF</code> कथन। वे इस संदर्भ में नियंत्रण तालिकाओं के रूप में जाने जाते हैं और एक उद्देश्य से निर्मित दुभाषिया के संयोजन के साथ उपयोग किए जाते हैं जिनके नियंत्रण प्रवाह को ऐरे में निहित मानों के अनुसार बदल दिया जाता है। ऐरे में [[सबरूटीन]] [[:hi:पाइंटर (प्रोग्रामिंग)|पॉइंटर्स]] (या रिश्तेदार सबरूटीन संख्याएँ जो [[:hi:स्विच स्टेटमेंट|स्विच (SWITCH')]] स्टेटमेंट द्वारा क्रियान्वित की जा सकती हैं) हो सकती हैं जो निष्पादन के मार्ग को निर्देशित करती हैं।


==तत्व पहचानकर्ता और पता सूत्र ==
==तत्व पहचानकर्ता और एड्रेस सूत्र ==
जब डेटा ऑब्जेक्ट को एक सरणी में संग्रहीत किया जाता है, तो अलग-अलग ऑब्जेक्ट्स को एक इंडेक्स द्वारा चुना जाता है जो आमतौर पर एक गैर-ऋणात्मक [[ अदिश (कंप्यूटिंग) ]] [[ पूर्णांक ]] होता है। इंडेक्स को सबस्क्रिप्ट भी कहा जाता है। एक अनुक्रमणिका एक संग्रहीत वस्तु के लिए सरणी मान को मैप करती है।
जब डेटा ऑब्जेक्ट्स को एक ऐरे में संग्रहीत किया जाता है, तो अलग-अलग ऑब्जेक्ट्स को इंडेक्स द्वारा चुना जाता है जो सामान्यतः एक गैर-ऋणात्मक [[:hi:अदिश (कंप्यूटिंग)|स्केलर]] [[:hi:पूर्णांक|पूर्णांक होता]] है। इंडेक्स को सबस्क्रिप्ट भी कहा जाता है। एक इंडेक्स ऐरे मान को संग्रहीत ऑब्जेक्ट में ''मैप'' करता है।


किसी सरणी के तत्वों को अनुक्रमित करने के तीन तरीके हैं:
किसी ऐरे के तत्वों को अनुक्रमित करने के तीन तरीके हैं:


; 0 (शून्य-आधारित क्रमांकन | शून्य-आधारित अनुक्रमण): सरणी का पहला तत्व 0 की सबस्क्रिप्ट द्वारा अनुक्रमित किया जाता है।<ref>{{cite web
; 0 (शून्य-आधारित क्रमांकन | शून्य-आधारित अनुक्रमण): ऐरे का पहला तत्व 0 की सबस्क्रिप्ट द्वारा अनुक्रमित किया जाता है।<ref>{{cite web
  | access-date = 8 April 2011
  | access-date = 8 April 2011
  | publisher = Computer Programming Web programming Tips
  | publisher = Computer Programming Web programming Tips
Line 45: Line 44:
  | url-status = dead
  | url-status = dead
}}</ref>
}}</ref>
; 1 (एक-आधारित अनुक्रमण): सरणी का पहला तत्व 1 की सबस्क्रिप्ट द्वारा अनुक्रमित किया जाता है।
; 1 (एक-आधारित अनुक्रमण): ऐरे का पहला तत्व 1 की सबस्क्रिप्ट द्वारा अनुक्रमित किया जाता है।
; n (n-आधारित अनुक्रमण): किसी सरणी के आधार अनुक्रमणिका को स्वतंत्र रूप से चुना जा सकता है। आम तौर पर प्रोग्रामिंग भाषाएं जो एन-आधारित इंडेक्सिंग की अनुमति देती हैं, नकारात्मक इंडेक्स वैल्यू और अन्य स्केलर (कंप्यूटिंग) डेटा प्रकार जैसे [[ प्रगणित प्रकार ]], या [[ चरित्र (कंप्यूटिंग) ]] को सरणी इंडेक्स के रूप में उपयोग किया जा सकता है।
; n (n-आधारित अनुक्रमण): शून्य आधारित इंडेक्सिंग का उपयोग [[:hi:सी (प्रोग्रामिंग भाषा)|सी]], [[:hi:जावा (प्रोग्रामिंग भाषा)|जावा]] और [[:hi:लिस्प (प्रोग्रामिंग भाषा)|लिस्प]] सहित कई प्रभावशाली प्रोग्रामिंग भाषाओं की डिजाइन पसंद है। यह सरल कार्यान्वयन की ओर जाता है जहां सबस्क्रिप्ट एक ऐरे की शुरुआती स्थिति से ऑफ़सेट को संदर्भित करता है, इसलिए पहले तत्व में शून्य का ऑफ़सेट होता है।
 
शून्य आधारित अनुक्रमण का उपयोग करना सी (प्रोग्रामिंग भाषा), [[ जावा (प्रोग्रामिंग भाषा) ]] और लिस्प (प्रोग्रामिंग भाषा) सहित कई प्रभावशाली प्रोग्रामिंग भाषाओं की डिज़ाइन पसंद है। यह सरल कार्यान्वयन की ओर जाता है जहां सबस्क्रिप्ट एक सरणी की प्रारंभिक स्थिति से ऑफ़सेट को संदर्भित करता है, इसलिए पहले तत्व में शून्य का ऑफ़सेट होता है।


सरणी के कई आयाम हो सकते हैं, इस प्रकार एकाधिक सूचकांकों का उपयोग करके किसी सरणी तक पहुंचना असामान्य नहीं है। उदाहरण के लिए, एक द्वि-आयामी सरणी <code>A</code> तीन पंक्तियों और चार स्तंभों के साथ अभिव्यक्ति द्वारा दूसरी पंक्ति और चौथे स्तंभ पर तत्व तक पहुंच प्रदान कर सकता है <code>A[1][3]</code> शून्य-आधारित अनुक्रमण प्रणाली के मामले में। इस प्रकार दो सूचकांकों का उपयोग द्वि-आयामी सरणी के लिए किया जाता है, तीन त्रि-आयामी सरणी के लिए, और n एक n-आयामी सरणी के लिए।
सारणियों के कई आयाम हो सकते हैं, इस प्रकार एक से अधिक सूचकांकों का उपयोग करके किसी ऐरे तक पहुंचना असामान्य नहीं है। उदाहरण के लिए, तीन पंक्तियों और चार स्तंभों वाला एक द्वि-आयामी ऐरे <code>A</code> शून्य-आधारित अनुक्रमण प्रणाली के मामले में अभिव्यक्ति <code>A[1][3]</code> द्वारा दूसरी पंक्ति और चौथे स्तंभ पर तत्व तक पहुंच प्रदान कर सकता है। इस प्रकार दो सूचकांकों का उपयोग द्वि-आयामी ऐरे के लिए किया जाता है, तीन तीन-आयामी ऐरे के लिए, और ''n'' - ''n'' -आयामी ऐरे के लिए किया जाता है।


किसी तत्व को निर्दिष्ट करने के लिए आवश्यक सूचकांकों की संख्या को सरणी का आयाम, आयाम या [[ रैंक (कंप्यूटर प्रोग्रामिंग) ]] कहा जाता है।
किसी तत्व को निर्दिष्ट करने के लिए आवश्यक सूचकांकों की संख्या को ऐरे का आयाम, आयाम या रैंक कहा जाता है।


मानक सरणियों में, प्रत्येक अनुक्रमणिका एक निश्चित श्रेणी के क्रमागत पूर्णांकों (या कुछ प्रगणित प्रकार के क्रमागत मान) तक सीमित होती है, और किसी तत्व के पते की गणना सूचकांकों पर एक रेखीय सूत्र द्वारा की जाती है।
मानक सरणियों में, प्रत्येक सूचकांक लगातार पूर्णांकों (या कुछ [[प्रगणित प्रकार]] के लगातार मूल्यों) की एक निश्चित सीमा तक सीमित होता है, और एक तत्व का एड्रेस सूचकांकों पर "रैखिक" सूत्र द्वारा गणना किया जाता है।


=== एक आयामी सरणियाँ ===
=== आयामी सरणियाँ ===
एक-आयामी सरणी (या एकल आयाम सरणी) एक प्रकार का रैखिक सरणी है। इसके तत्वों तक पहुँचने में एक एकल सबस्क्रिप्ट शामिल होता है जो या तो एक पंक्ति या स्तंभ अनुक्रमणिका का प्रतिनिधित्व कर सकता है।
आयामी ऐरे (या एकल आयाम ऐरे) रैखिक ऐरे का एक प्रकार है। इसके तत्वों तक पहुँचने में एक एकल सबस्क्रिप्ट सम्मिलित है जो या तो एक पंक्ति या स्तंभ अनुक्रमणिका का प्रतिनिधित्व कर सकता है।


एक उदाहरण के रूप में सी घोषणा पर विचार करें <code>int anArrayName[10];</code> जो दस पूर्णांकों की एक-आयामी सरणी घोषित करता है। यहां, सरणी दस प्रकार के तत्वों को संग्रहीत कर सकती है <code>int</code> . इस सरणी में शून्य से नौ तक के सूचकांक हैं। उदाहरण के लिए, भाव <code>anArrayName[0]</code> तथा <code>anArrayName[9]</code> क्रमशः प्रथम और अंतिम तत्व हैं।
उदाहरण के रूप में C डिक्लेरेशन <code>int anArrayName[10];</code> जो दस पूर्णांकों की एक आयामी ऐरे घोषित करता है। यहां, ऐरे <code>int</code> प्रकार के दस तत्वों को संग्रहीत कर सकती है। इस ऐरे में शून्य से लेकर नौ तक के सूचकांक हैं। उदाहरण के लिए, अभिव्यक्ति <code>anArrayName[0]</code> और <code>anArrayName[9]</code> क्रमशः पहले और अंतिम तत्व हैं।


रैखिक एड्रेसिंग वाले वेक्टर के लिए, इंडेक्स i वाला तत्व पते पर स्थित है {{nowrap|''B'' + ''c'' × ''i''}}, जहां बी एक निश्चित आधार पता है और सी एक निश्चित स्थिरांक है, जिसे कभी-कभी पता वृद्धि या स्ट्राइड कहा जाता है।
रैखिक एड्रेसिंग वाले वेक्टर के लिए, इंडेक्स ''i'' वाला तत्व {{Nowrap|''B'' + ''c'' × ''i''}} एड्रेस पर स्थित है, जहां ''B'' एक निश्चित ''आधार एड्रेस'' है और ''c'' एक निश्चित स्थिरांक है, जिसे कभी-कभी ''एड्रेस इंक्रीमेंट'' या ''स्ट्राइड'' कहा जाता है।


यदि मान्य तत्व सूचकांक 0 से शुरू होते हैं, तो स्थिर B केवल सरणी के पहले तत्व का पता होता है। इस कारण से, सी (प्रोग्रामिंग भाषा) निर्दिष्ट करता है कि सरणी सूचकांक हमेशा 0 से शुरू होते हैं; और कई प्रोग्रामर उस तत्व को पहले के बजाय शून्य-आधारित नंबरिंग कहेंगे।
यदि मान्य तत्व सूचकांक 0 से आरंभ होते हैं, तो स्थिरांक ''B'' केवल ऐरे के पहले तत्व का एड्रेस है। इस कारण से, [[:hi:सी (प्रोग्रामिंग भाषा)|सी प्रोग्रामिंग भाषा]] निर्दिष्ट करती है कि ऐरे सूचकांक सदैव 0 से आरंभ होते हैं; और कई प्रोग्रामर उस तत्व को "फर्स्ट" के बजाय " [[:hi:शून्य आधारित नंबरिंग|ज़ीरोथ]] " कहेंगे।


हालांकि, कोई आधार पता बी के उपयुक्त विकल्प द्वारा पहले तत्व की अनुक्रमणिका चुन सकता है। उदाहरण के लिए, यदि सरणी में पांच तत्व हैं, 1 से 5 अनुक्रमित हैं, और आधार पता बी को प्रतिस्थापित किया गया है {{nowrap|''B'' + 30''c''}}, तो उन्हीं तत्वों के सूचकांक 31 से 35 होंगे। यदि संख्या 0 से शुरू नहीं होती है, तो स्थिरांक B किसी भी तत्व का पता नहीं हो सकता है।
हालांकि, आधार एड्रेस ''B'' के उचित विकल्प से कोई भी पहले तत्व की अनुक्रमणिका चुन सकता है। उदाहरण के लिए, यदि ऐरे में पाँच तत्व हैं, जिन्हें 1 से 5 तक अनुक्रमित किया गया है, और आधार एड्रेस ''B'' को {{Nowrap|''B'' + 30''c''}} से बदल दिया गया है, तो उन्हीं तत्वों के सूचकांक 31 से 35 होंगे। यदि क्रमांकन 0 से आरंभ नहीं होता है, तो अचर ''B'' किसी भी तत्व का एड्रेस नहीं हो सकता है।


===बहुआयामी सरणियाँ===
===बहुआयामी सरणियाँ===
एक बहुआयामी सरणी के लिए, सूचकांक i,j वाले तत्व का पता B + c · i + d · j होगा, जहां गुणांक c और d क्रमशः पंक्ति और स्तंभ पता वृद्धि हैं।
बहुआयामी ऐरे के लिए, सूचकांक ''i'', ''j'' वाले तत्व का एड्रेस ''B'' + ''c'' · ''i'' + ''d'' · ''j'' होगा, जहां गुणांक ''c'' और ''d'' क्रमशः ''पंक्ति'' और ''स्तंभ एड्रेस वृद्धि'' हैं।


अधिक सामान्यतः, k-आयामी सरणी में, सूचकांक वाले तत्व का पता i<sub>1</sub>, मैं<sub>2</sub>, ..., मैं<sub>''k''</sub> है
अधिक आम तौर पर, ''k'' -आयामी ऐरे में, सूचकांक ''i'' <sub>1</sub>, ''i'' <sub>2</sub>, ..., ''i'' <sub>''k''</sub> वाले तत्व का एड्रेस है
: बी + सी<sub>1</sub> · मैं<sub>1</sub> + सी<sub>2</sub> · मैं<sub>2</sub> + … + सी<sub>''k''</sub> · मैं<sub>''k''</sub>.
: ''B'' + ''c''<sub>1</sub> · ''i''<sub>1</sub> + ''c''<sub>2</sub> · ''i''<sub>2</sub> + … + ''c<sub>k</sub>'' · ''i<sub>k</sub>''.


उदाहरण के लिए: int a[2][3];
उदाहरण के लिए: int a[2][3];


इसका अर्थ है कि सरणी a में 2 पंक्तियाँ और 3 स्तंभ हैं, और सरणी पूर्णांक प्रकार की है। यहां हम 6 तत्वों को स्टोर कर सकते हैं जिन्हें वे रैखिक रूप से संग्रहीत करेंगे लेकिन पहली पंक्ति रैखिक से शुरू होकर दूसरी पंक्ति के साथ जारी रहेंगे। उपरोक्त सरणी को a . के रूप में संग्रहीत किया जाएगा<sub>11</sub>, एक<sub>12</sub>, एक<sub>13</sub>, एक<sub>21</sub>, एक<sub>22</sub>, एक<sub>23</sub>.
इसका अर्थ है कि ऐरे a में 2 पंक्तियाँ और 3 स्तंभ हैं, और ऐरे पूर्णांक प्रकार की है। यहां हम 6 तत्वों को स्टोर कर सकते हैं जिन्हें वे रैखिक रूप से संग्रहीत करेंगे लेकिन पहली पंक्ति रैखिक से आरंभहोकर दूसरी पंक्ति के साथ जारी रहेंगे। उपरोक्त ऐरे को <sub>11</sub>, a <sub>12</sub>, a <sub>13</sub>, a <sub>21</sub>, a <sub>22</sub>, a <sub>23</sub> के रूप में संग्रहीत किया जाएगा।


इस सूत्र को स्मृति में फ़िट होने वाले किसी भी सरणी के लिए केवल k गुणन और k परिवर्धन की आवश्यकता होती है। इसके अलावा, यदि कोई गुणांक 2 की निश्चित शक्ति है, तो गुणन को [[ बिटवाइज़ ऑपरेशन ]] द्वारा प्रतिस्थापित किया जा सकता है।
इस सूत्र को मेमोरी में फ़िट होने वाले किसी भी ऐरे के लिए केवल ''k'' गुणन और ''k'' परिवर्धन की आवश्यकता होती है। इसके अलावा, यदि कोई गुणांक 2 की निश्चित शक्ति है, तो गुणन को [[ बिटवाइज़ ऑपरेशन |बिटवाइज़ ऑपरेशन]] द्वारा प्रतिस्थापित किया जा सकता है।


गुणांक सी<sub>''k''</sub> चुना जाना चाहिए ताकि प्रत्येक वैध सूचकांक एक विशिष्ट तत्व के पते पर मैप कर सके।
गुणांक ''c'' <sub>''k''</sub> को चुना जाना चाहिए ताकि प्रत्येक मान्य इंडेक्स टपल एक विशिष्ट तत्व के एड्रेस पर मैप हो।


यदि प्रत्येक सूचकांक के लिए न्यूनतम कानूनी मान 0 है, तो B उस तत्व का पता है जिसके सभी सूचकांक शून्य हैं। जैसा कि एक-आयामी मामले में, आधार पता B को बदलकर तत्व सूचकांकों को बदला जा सकता है। इस प्रकार, यदि एक द्वि-आयामी सरणी में पंक्तियों और स्तंभों को क्रमशः 1 से 10 और 1 से 20 तक अनुक्रमित किया जाता है, तो B को प्रतिस्थापित करके {{nowrap|''B'' + ''c''<sub>1</sub> − 3''c''<sub>2</sub>}} उन्हें क्रमशः 0 से 9 और 4 से 23 तक पुन: क्रमांकित किया जाएगा। इस सुविधा का लाभ उठाते हुए, कुछ भाषाएं (जैसे फोरट्रान 77) निर्दिष्ट करती हैं कि सरणी सूचकांक 1 से शुरू होते हैं, जैसा कि गणितीय परंपरा में है, जबकि अन्य भाषाएं (जैसे फोरट्रान 90, पास्कल और अल्गोल) उपयोगकर्ता को प्रत्येक सूचकांक के लिए न्यूनतम मान चुनने देती हैं।
यदि प्रत्येक सूचकांक का न्यूनतम वैधानिक मान 0 है, तो ''B'' उस तत्व का एड्रेस है जिसके सभी सूचकांक शून्य हैं। जैसा कि एक आयामी मामले में, आधार एड्रेस ''B'' बदलकर तत्व सूचकांकों को बदला जा सकता है। इस प्रकार, यदि एक द्वि-आयामी ऐरे में पंक्तियों और स्तंभों को क्रमशः 1 से 10 और 1 से 20 तक अनुक्रमित किया गया है, तो ''B'' को {{Nowrap|''B'' + ''c''<sub>1</sub> − 3''c''<sub>2</sub>}} से प्रतिस्थापित करने पर उन्हें 0 से 9 और 4 से 23 तक फिर से क्रमांकित किया जाएगा।, क्रमश। इस सुविधा का लाभ उठाते हुए, कुछ भाषाएँ (जैसे फोरट्रान 77) निर्दिष्ट करती हैं कि ऐरे सूचकांक 1 से शुरू होते हैं, जैसा कि गणितीय परंपरा में होता है, जबकि अन्य भाषाएँ (जैसे फोरट्रान 90, पास्कल और अल्गोल) उपयोगकर्ता को प्रत्येक सूचकांक के लिए न्यूनतम मान चुनने देती हैं।


=== डोप वैक्टर ===
=== डोप वैक्टर ===
एड्रेसिंग फॉर्मूला पूरी तरह से आयाम डी, आधार पता बी, और वृद्धि सी द्वारा परिभाषित किया गया है<sub>1</sub>, सी<sub>2</sub>, ..., सी<sub>''k''</sub>. इन मापदंडों को सरणी के डिस्क्रिप्टर या स्ट्राइड वेक्टर या [[ डोप वेक्टर ]] नामक रिकॉर्ड में पैक करना अक्सर उपयोगी होता है।<ref name="andres" /><ref name="garcia" />प्रत्येक तत्व का आकार, और प्रत्येक सूचकांक के लिए अनुमत न्यूनतम और अधिकतम मान भी डोप वेक्टर में शामिल किए जा सकते हैं। डोप वेक्टर सरणी के लिए एक पूर्ण [[ संभाल (कंप्यूटिंग) ]] है, और सबरूटीन के तर्क के रूप में सरणियों को पारित करने का एक सुविधाजनक तरीका है। डोप वेक्टर में हेर-फेर करके कई उपयोगी [[ सरणी टुकड़ा करना ]] ऑपरेशंस (जैसे कि सब-एरे का चयन करना, इंडेक्स को स्वैप करना, या इंडेक्स की दिशा को उलटना) बहुत कुशलता से किया जा सकता है।<ref name="andres" />
एड्रेसिंग फॉर्मूला पूरी तरह से आयाम डी, आधार एड्रेस B, और वृद्धि सी द्वारा परिभाषित किया गया है ''c''<sub>1</sub>, ''c''<sub>2</sub>, ..., ''c<sub>k</sub>''. इन मापदंडों को ऐरे के डिस्क्रिप्टर या स्ट्राइड वेक्टर या [[ डोप वेक्टर |डोप वेक्टर]] नामक रिकॉर्ड में पैक करना प्रायःउपयोगी होता है।<ref name="andres">{{cite arXiv |eprint=1008.2909 |author1=Bjoern Andres |author2=Ullrich Koethe |author3=Thorben Kroeger |author4=Hamprecht |title=C++98 और C++0x . के लिए रनटाइम-लचीले बहु-आयामी सरणी और दृश्य|class=cs.DS |year=2010}}</ref><ref name="garcia">{{Cite journal|last1=Garcia|first1=Ronald |first2=Andrew |last2=Lumsdaine|year=2005|title=मल्टीएरे: सरणियों के साथ सामान्य प्रोग्रामिंग के लिए एक सी ++ पुस्तकालय|journal=Software: Practice and Experience|volume=35|issue=2|pages=159–188|issn=0038-0644|doi=10.1002/spe.630|s2cid=10890293 }}</ref> प्रत्येक तत्व का आकार, और प्रत्येक सूचकांक के लिए अनुमत न्यूनतम और अधिकतम मान भी डोप वेक्टर में सम्मिलित किए जा सकते हैं। डोप वेक्टर ऐरे के लिए एक पूर्ण [[ संभाल (कंप्यूटिंग) |संभाल (कंप्यूटिंग)]] है, और सबरूटीन के तर्क के रूप में सरणियों को पारित करने का एक सुविधाजनक तरीका है। डोप वेक्टर में हेर-फेर करके कई उपयोगी [[ सरणी टुकड़ा करना |ऐरे टुकड़ा करना]] ऑपरेशंस (जैसे कि सब-एरे का चयन करना, इंडेक्स को स्वैप करना, या इंडेक्स की दिशा को उलटना) बहुत कुशलता से किया जा सकता है।<ref name="andres" />


=== कॉम्पैक्ट लेआउट ===
{{Main|रो- और कॉलम- मेजर ऑर्डर}}


=== कॉम्पैक्ट लेआउट ===
प्रायःगुणांक चुने जाते हैं ताकि तत्व मेमोरी के एक सन्निहित क्षेत्र पर अधिकार कर लें। हालांकि, ऐसा जरूरी नहीं है। यहां तक ​​​​कि अगर सरणियाँ सदैव सन्निहित तत्वों के साथ बनाई जाती हैं, तो कुछ ऐरे स्लाइसिंग ऑपरेशन उनसे गैर-सन्निहित उप-ऐरे बना सकते हैं।
{{Main|Row- and column-major order}}
अक्सर गुणांक चुने जाते हैं ताकि तत्व स्मृति के एक सन्निहित क्षेत्र पर कब्जा कर लें। हालांकि, ऐसा जरूरी नहीं है। यहां तक ​​​​कि अगर सरणियाँ हमेशा सन्निहित तत्वों के साथ बनाई जाती हैं, तो कुछ सरणी स्लाइसिंग ऑपरेशन उनसे गैर-सन्निहित उप-सरणी बना सकते हैं।


[[File:Row_and_column_major_order.svg|thumb|upright|पंक्ति- और स्तंभ-प्रमुख क्रम का चित्रण]]द्वि-आयामी सरणी के लिए दो व्यवस्थित कॉम्पैक्ट लेआउट हैं। उदाहरण के लिए, मैट्रिक्स पर विचार करें
[[File:Row_and_column_major_order.svg|thumb|upright|पंक्ति- और स्तंभ-प्रमुख क्रम का चित्रण]]द्वि-आयामी ऐरे के लिए दो व्यवस्थित कॉम्पैक्ट लेआउट हैं। उदाहरण के लिए, मैट्रिक्स पर विचार करें
:<math>A =
:<math>A =
   \begin{bmatrix}
   \begin{bmatrix}
Line 99: Line 96:
   \end{bmatrix}.
   \end{bmatrix}.
</math>
</math>
पंक्ति-प्रमुख क्रम लेआउट में (सांख्यिकीय रूप से घोषित सरणियों के लिए C द्वारा अपनाया गया), प्रत्येक पंक्ति में तत्वों को लगातार स्थिति में संग्रहीत किया जाता है और एक पंक्ति के सभी तत्वों का पता लगातार पंक्ति के किसी भी तत्व से कम होता है:
पंक्ति-प्रमुख क्रम लेआउट में (सांख्यिकीय रूप से घोषित सरणियों के लिए C द्वारा अपनाया गया), प्रत्येक पंक्ति में तत्वों को लगातार स्थिति में संग्रहीत किया जाता है और एक पंक्ति के सभी तत्वों का एड्रेस लगातार पंक्ति के किसी भी तत्व से कम होता है:
: {| class="wikitable"
: {| class="wikitable"
|-
|-
| 1 || 2 || 3 || 4 || 5 || 6 || 7 || 8 || 9
| 1 || 2 || 3 || 4 || 5 || 6 || 7 || 8 || 9
|}
|}
कॉलम-मेजर ऑर्डर (पारंपरिक रूप से फोरट्रान द्वारा उपयोग किया जाता है) में, प्रत्येक कॉलम में तत्व मेमोरी में लगातार होते हैं और कॉलम के सभी तत्वों का लगातार कॉलम के किसी भी तत्व की तुलना में कम पता होता है:
कॉलम-मेजर ऑर्डर (पारंपरिक रूप से फोरट्रान द्वारा उपयोग किया जाता है) में, प्रत्येक कॉलम में तत्व मेमोरी में लगातार होते हैं और कॉलम के सभी तत्वों का लगातार कॉलम के किसी भी तत्व की तुलना में कम एड्रेस होता है:
: {| class="wikitable"
: {| class="wikitable"
|-
|-
| 1 || 4 || 7 || 2 || 5 || 8 || 3 || 6 || 9
| 1 || 4 || 7 || 2 || 5 || 8 || 3 || 6 || 9
|}
|}
तीन या अधिक सूचकांकों वाले सरणियों के लिए, पंक्ति प्रमुख क्रम किसी भी दो तत्वों को लगातार स्थिति में रखता है जिनके सूचकांक टुपल्स अंतिम सूचकांक में केवल एक से भिन्न होते हैं। कॉलम प्रमुख क्रम पहले सूचकांक के संबंध में समान है।
तीन या अधिक सूचकांकों के साथ सरणियों के लिए, "पंक्ति प्रमुख क्रम" किसी भी दो तत्वों को लगातार स्थिति में रखता है जिनके सूचकांक टुपल्स ''अंतिम'' सूचकांक में केवल एक से भिन्न होते हैं। "कॉलम प्रमुख क्रम" ''पहली'' अनुक्रमणिका के संबंध में समान है।


सिस्टम में जो [[ प्रोसेसर कैश ]] या [[ अप्रत्यक्ष स्मृति ]] का उपयोग करते हैं, एक सरणी को स्कैन करना बहुत तेज़ होता है यदि लगातार तत्वों को स्मृति में लगातार स्थिति में संग्रहीत किया जाता है, न कि बिखरे हुए। बहुआयामी सरणियों का उपयोग करने वाले कई एल्गोरिदम उन्हें एक पूर्वानुमेय क्रम में स्कैन करेंगे। एक प्रोग्रामर (या एक परिष्कृत कंपाइलर) इस जानकारी का उपयोग प्रत्येक सरणी के लिए पंक्ति- या स्तंभ-प्रमुख लेआउट के बीच चयन करने के लिए कर सकता है। उदाहरण के लिए, दो मैट्रिक्स के उत्पाद · बी की गणना करते समय, को पंक्ति-प्रमुख क्रम में और बी को कॉलम-प्रमुख क्रम में संग्रहीत करना सबसे अच्छा होगा।
सिस्टम में जो प्रोसेसर कैश या वर्चुअल मेमोरी का उपयोग करते हैं, एक ऐरे को स्कैन करना बहुत तेज होता है यदि लगातार तत्वों को मेमोरी में लगातार स्थिति में संग्रहीत किया जाता है, बजाय कम बिखरे हुए। कई एल्गोरिदम जो बहुआयामी सरणियों का उपयोग करते हैं, उन्हें एक पूर्वानुमानित क्रम में स्कैन करेंगे। एक प्रोग्रामर (या एक परिष्कृत संकलक) इस जानकारी का उपयोग प्रत्येक ऐरे के लिए पंक्ति-या स्तंभ-प्रमुख लेआउट के बीच चयन करने के लिए कर सकता है। उदाहरण के लिए, दो आव्यूहों के उत्पाद ''A'' · ''B'' की गणना करते समय, ''A'' को पंक्ति-प्रमुख क्रम में और ''B'' को स्तंभ-प्रमुख क्रम में संग्रहित करना सबसे अच्छा होगा।।


=== आकार बदलना ===
=== आकार बदलना (रिसाइजिंग) ===
{{Main|Dynamic array}}
{{Main|डायनामिक सरणी}}
स्थैतिक सरणियों का एक आकार होता है जो उनके बनाए जाने पर तय होता है और फलस्वरूप तत्वों को सम्मिलित या हटाने की अनुमति नहीं देता है। हालांकि, एक नई सरणी आवंटित करके और पुराने सरणी की सामग्री की प्रतिलिपि बनाकर, सरणी के गतिशील संस्करण को प्रभावी ढंग से कार्यान्वित करना संभव है; [[ गतिशील सरणी ]] देखें। यदि यह ऑपरेशन बार-बार किया जाता है, तो सरणी के अंत में सम्मिलन के लिए केवल परिशोधन स्थिर समय की आवश्यकता होती है।


कुछ सरणी डेटा संरचनाएं भंडारण को पुन: आवंटित नहीं करती हैं, लेकिन उपयोग में सरणी के तत्वों की संख्या की गणना करती हैं, जिन्हें गिनती या आकार कहा जाता है। यह प्रभावी रूप से सरणी को एक निश्चित अधिकतम आकार या क्षमता के साथ एक गतिशील सरणी बनाता है; पास्कल तार इसके उदाहरण हैं।
स्थैतिक सरणियों का एक आकार होता है जो उनके बनाए जाने पर तय होता है और फलस्वरूप तत्वों को सम्मिलित या निकालने की अनुमति नहीं देता है। हालाँकि, एक नई ऐरे आवंटित करके और पुराने ऐरे की सामग्री को इसमें कॉपी करके, किसी ऐरे के ''गतिशील'' संस्करण को प्रभावी ढंग से लागू करना संभव है; [[गतिशील सरणी|गतिशील ऐरे]] देखें। यदि यह ऑपरेशन बार-बार किया जाता है, तो ऐरे के अंत में सम्मिलन के लिए केवल परिशोधित निरंतर समय की आवश्यकता होती है।
 
कुछ ऐरे डेटा संरचनाएं भंडारण को पुन: आवंटित नहीं करती हैं, लेकिन उपयोग में ऐरे के तत्वों की संख्या की गणना करती हैं, जिन्हें गिनती या आकार कहा जाता है। यह प्रभावी रूप से ऐरे को एक निश्चित अधिकतम आकार या क्षमता के साथ एक गतिशील ऐरे बनाता है; पास्कल तार इसके उदाहरण हैं।


=== गैर-रैखिक सूत्र ===
=== गैर-रैखिक सूत्र ===
अधिक जटिल (गैर-रैखिक) सूत्र कभी-कभी उपयोग किए जाते हैं। उदाहरण के लिए, एक कॉम्पैक्ट द्वि-आयामी [[ त्रिकोणीय सरणी ]] के लिए, एड्रेसिंग फॉर्मूला डिग्री 2 का बहुपद है।
अधिक जटिल (गैर-रैखिक) सूत्र कभी-कभी उपयोग किए जाते हैं। उदाहरण के लिए, एक कॉम्पैक्ट द्वि-आयामी [[ त्रिकोणीय सरणी |त्रिकोणीय ऐरे]] के लिए, एड्रेसिंग फॉर्मूला डिग्री 2 का बहुपद है।


==दक्षता==
==दक्षता==
दोनों स्टोर और चयन करें (निर्धारक सबसे खराब स्थिति) [[ निरंतर समय ]]। Arrays उन तत्वों की संख्या में रैखिक ([[ बिग-नोटेशन ]] (एन)) स्थान लेते हैं जो वे धारण करते हैं।
''स्टोर'' और ''चयन'' दोनों (नियतात्मक सबसे खराब स्थिति) निरंतर समय लेते हैं। सरणियाँ ''n'' तत्वों की संख्या में रैखिक ([[:hi:बड़ा संकेतन|O]] ( ''n'' )) स्थान लेती हैं जिन्हें वे धारण करते हैं।


तत्व आकार k के साथ एक सरणी में और B बाइट्स के कैश लाइन आकार वाली मशीन पर, n तत्वों की एक सरणी के माध्यम से पुनरावृत्ति करने के लिए न्यूनतम सीलिंग (nk/B) कैश मिस की आवश्यकता होती है, क्योंकि इसके तत्व सन्निहित मेमोरी स्थानों पर कब्जा कर लेते हैं। यादृच्छिक स्मृति स्थानों पर n तत्वों तक पहुंचने के लिए आवश्यक कैश मिस की संख्या से यह मोटे तौर पर बी/के का एक कारक है। नतीजतन, एक सरणी पर अनुक्रमिक पुनरावृत्ति कई अन्य डेटा संरचनाओं पर पुनरावृत्ति की तुलना में अभ्यास में काफी तेज है, एक संपत्ति जिसे संदर्भ के इलाके कहा जाता है (हालांकि इसका मतलब यह नहीं है कि एक [[ बिल्कुल सही हैश फ़ंक्शन ]] या हैश फ़ंक्शन का उपयोग करना # ट्रिविअल हैश फ़ंक्शन के भीतर वही (स्थानीय) सरणी, और भी तेज़ नहीं होगी - और निरंतर समय में प्राप्त करने योग्य)। पुस्तकालय स्मृति की श्रेणियों की प्रतिलिपि बनाने के लिए निम्न-स्तरीय अनुकूलित सुविधाएं प्रदान करते हैं (जैसे कि String.h) जिसका उपयोग सरणी तत्वों के [[ सन्निहित डेटा भंडारण ]] ब्लॉकों को व्यक्तिगत तत्व पहुंच के माध्यम से प्राप्त किए जाने की तुलना में काफी तेजी से स्थानांतरित करने के लिए किया जा सकता है। इस तरह के अनुकूलित रूटीन की गति सरणी तत्व आकार, वास्तुकला और कार्यान्वयन के अनुसार भिन्न होती है।
तत्व आकार ''k'' के साथ एक ऐरे में और B बाइट्स के कैश लाइन आकार वाली मशीन पर, ''n'' तत्वों की एक ऐरे के माध्यम से पुनरावृति के लिए न्यूनतम सीलिंग ( ''nk'' /B) कैश मिस की आवश्यकता होती है, क्योंकि इसके तत्व सन्निहित मेमोरी स्थानों पर कब्जा कर लेते हैं। यादृच्छिक मेमोरी स्थानों पर ''एन'' तत्वों तक पहुंचने के लिए आवश्यक कैश मिस की संख्या की तुलना में यह लगभग ''बी'' /के का एक कारक है। परिणामस्वरूप, एक ऐरे पर अनुक्रमिक पुनरावृत्ति कई अन्य डेटा संरचनाओं पर पुनरावृत्ति की तुलना में अभ्यास में काफी तेज है, एक संपत्ति जिसे संदर्भ की स्थानीयता कहा जाता है (इसका मतलब यह ''नहीं'' है कि एक ही (स्थानीय) ऐरे के भीतर एक [[:hi:बिल्कुल सही हैश समारोह|पूर्ण हैश]] या [[:hi:हैश फंकशन|तुच्छ हैश]] का उपयोग करना, और भी तेज़ नहीं होगा - और निरंतर समय में प्राप्त करने योग्य)। पुस्तकालय मेमोरी की श्रेणियों (जैसे [[:hi:स्ट्रिंग.एच|memcpy]] ) की प्रतिलिपि बनाने के लिए निम्न-स्तरीय अनुकूलित सुविधाएं प्रदान करते हैं, जिनका उपयोग ऐरे तत्वों के [[:hi:सन्निहित डेटा भंडारण|सन्निहित]] ब्लॉकों को व्यक्तिगत तत्व पहुंच के माध्यम से प्राप्त करने की तुलना में काफी तेजी से किया जा सकता है। इस तरह के अनुकूलित रूटीन का स्पीडअप ऐरे तत्व आकार, आर्किटेक्चर और कार्यान्वयन से भिन्न होता है।


मेमोरी-वार, सरणियाँ कॉम्पैक्ट डेटा संरचनाएं हैं जिनमें कोई प्रति-तत्व [[ कम्प्यूटेशनल ओवरहेड ]] नहीं है। प्रति-सरणी ओवरहेड हो सकता है (उदाहरण के लिए, अनुक्रमणिका सीमाओं को संग्रहीत करने के लिए) लेकिन यह भाषा-निर्भर है। यह भी हो सकता है कि एक सरणी में संग्रहीत तत्वों को अलग-अलग चर में संग्रहीत समान तत्वों की तुलना में कम मेमोरी की आवश्यकता होती है, क्योंकि कई सरणी तत्वों को एक ही शब्द (डेटा प्रकार) में संग्रहीत किया जा सकता है; ऐसे सरणियों को अक्सर पैक्ड सरणियाँ कहा जाता है। एक चरम (लेकिन आमतौर पर इस्तेमाल किया जाने वाला) मामला [[ बिट सरणी ]] है, जहां प्रत्येक बिट एक तत्व का प्रतिनिधित्व करता है। इस प्रकार एक एकल [[ ऑक्टेट (कंप्यूटिंग) ]] सबसे कॉम्पैक्ट रूप में, अधिकतम 8 विभिन्न स्थितियों के 256 विभिन्न संयोजनों को धारण कर सकता है।
मेमोरी-वार, सरणियाँ कॉम्पैक्ट डेटा संरचनाएं हैं जिनमें कोई प्रति-तत्व [[ कम्प्यूटेशनल ओवरहेड |कम्प्यूटेशनल ओवरहेड]] नहीं है। प्रति-ऐरे ओवरहेड हो सकता है (उदाहरण के लिए, अनुक्रमणिका सीमाओं को संग्रहीत करने के लिए) लेकिन यह भाषा-निर्भर है। यह भी हो सकता है कि एक ऐरे में संग्रहीत तत्वों को अलग-अलग चर में संग्रहीत समान तत्वों की तुलना में कम मेमोरी की आवश्यकता होती है, क्योंकि कई ऐरे तत्वों को एक ही शब्द (डेटा प्रकार) में संग्रहीत किया जा सकता है; ऐसे सरणियों को प्रायःपैक्ड सरणियाँ कहा जाता है। एक चरम (लेकिन सामान्यतः इस्तेमाल किया जाने वाला) मामला [[ बिट सरणी | बिट ऐरे]] है, जहां प्रत्येक बिट एक तत्व का प्रतिनिधित्व करता है। इस प्रकार एक एकल [[ ऑक्टेट (कंप्यूटिंग) |ऑक्टेट (कंप्यूटिंग)]] सबसे कॉम्पैक्ट रूप में, अधिकतम 8 विभिन्न स्थितियों के 256 विभिन्न संयोजनों को धारण कर सकता है।


स्टैटिकली प्रेडिक्टेबल एक्सेस पैटर्न के साथ ऐरे एक्सेस [[ डेटा समानता ]] का एक प्रमुख स्रोत है।
स्टैटिकली प्रेडिक्टेबल एक्सेस पैटर्न के साथ ऐरे एक्सेस [[ डेटा समानता |डेटा समानता]] का एक प्रमुख स्रोत है।


=== अन्य डेटा संरचनाओं के साथ तुलना ===
=== अन्य डेटा संरचनाओं के साथ तुलना ===
{{List data structure comparison}}
[[:hi:गतिशील सरणी|डायनेमिक सरणियाँ]] या बढ़ने योग्य सरणियाँ सरणियों के समान होती हैं लेकिन तत्वों को सम्मिलित करने और हटाने की क्षमता जोड़ती हैं; अंत में जोड़ना और हटाना विशेष रूप से कुशल है। हालांकि, वे रैखिक ([[:hi:बड़ा संकेतन]] (''n'')) अतिरिक्त संग्रहण आरक्षित करते हैं, जबकि सरणियाँ अतिरिक्त संग्रहण आरक्षित नहीं करती हैं।
गतिशील सरणियाँ या बढ़ने योग्य सरणियाँ सरणियों के समान होती हैं लेकिन तत्वों को सम्मिलित करने और हटाने की क्षमता जोड़ती हैं; अंत में जोड़ना और हटाना विशेष रूप से कुशल है। हालांकि, वे लीनियर (बिग-नोटेशन#फैमिली ऑफ बच्चन-लैंडौ नोटेशन|Θ(n)) अतिरिक्त स्टोरेज आरक्षित करते हैं, जबकि एरेज़ अतिरिक्त स्टोरेज को आरक्षित नहीं करते हैं।


साहचर्य सरणियाँ बड़े भंडारण ओवरहेड्स के बिना सरणी जैसी कार्यक्षमता के लिए एक तंत्र प्रदान करती हैं जब सूचकांक मान विरल होते हैं। उदाहरण के लिए, एक सरणी जिसमें केवल 1 और 2 बिलियन इंडेक्स पर मान होते हैं, ऐसी संरचना का उपयोग करने से लाभ हो सकता है। पूर्णांक कुंजियों के साथ विशिष्ट सहयोगी सरणियों में मूलांक पेड़, जूडी सरणियाँ और वैन एम्डे बोस पेड़ शामिल हैं।
[[साहचर्य सरणियाँ]] विशाल भंडारण ओवरहेड्स के बिना ऐरे जैसी कार्यक्षमता के लिए एक तंत्र प्रदान करती हैं जब सूचकांक मान विरल होते हैं। उदाहरण के लिए, एक ऐरे जिसमें केवल इंडेक्स 1 और 2 बिलियन के मान होते हैं, ऐसी संरचना का उपयोग करने से लाभान्वित हो सकते हैं। पूर्णांक कुंजियों के साथ विशिष्ट साहचर्य सरणियों में [[:hi:मूलांक का पेड़|पेट्रीसिया ट्राई]], [[:hi:जूडी सरणी|जूडी सरणियाँ]] और [[:hi:वैन एमडे बोस ट्री|वैन एम्डे बोस ट्री]] सम्मिलित हैं।


[[ सेल्फ-बैलेंसिंग बाइनरी सर्च ट्री ]] को अनुक्रमित पहुंच के लिए (लॉग एन) समय की आवश्यकता होती है, लेकिन (लॉग एन) समय में तत्वों को सम्मिलित करने या हटाने की भी अनुमति देता है,<ref>{{cite web|url=http://www.chiark.greenend.org.uk/~sgtatham/algorithms/cbtree.html|title=गिने गए बी-पेड़}}</ref> जबकि बढ़ने योग्य सरणियों को एक मनमानी स्थिति में तत्वों को सम्मिलित करने या हटाने के लिए रैखिक (Θ(n)) समय की आवश्यकता होती है।
संतुलित ट्री को अनुक्रमित पहुंच के लिए O(log ''n'' ) समय की आवश्यकता होती है, लेकिन O(log ''n'' ) समय में तत्वों को सम्मिलित करने या हटाने की भी अनुमति होती है,<ref>{{Cite web|url=http://www.chiark.greenend.org.uk/~sgtatham/algorithms/cbtree.html|title=Counted B-Trees}}</ref> जबकि बढ़ने योग्य सरणियों को रैखिक (Θ( ''n'' )) समय की आवश्यकता होती है ताकि तत्वों को सम्मिलित या हटाया जा सके।


लिंक्ड सूचियां बीच में निरंतर समय हटाने और सम्मिलन की अनुमति देती हैं लेकिन अनुक्रमित पहुंच के लिए रैखिक समय लेती हैं। उनकी स्मृति उपयोग आमतौर पर सरणियों से भी बदतर है, लेकिन फिर भी रैखिक है।
लिंक्ड सूचियां बीच में निरंतर समय हटाने और सम्मिलन की अनुमति देती हैं लेकिन अनुक्रमित पहुंच के लिए रैखिक समय लेती हैं। उनकी मेमोरी उपयोग सामान्यतः सरणियों से भी बदतर है, लेकिन फिर भी रैखिक है।


[[Image:Array of array storage.svg|120px|left|एक द्वि-आयामी सरणी को एक-आयामी सरणी (पंक्तियों) के एक-आयामी सरणी के रूप में संग्रहीत किया जाता है।]]एक Iliffe वेक्टर एक बहुआयामी सरणी संरचना का एक विकल्प है। यह एक आयाम से कम के सरणियों के संदर्भ में एक-आयामी सरणी (कंप्यूटर विज्ञान) का उपयोग करता है। दो आयामों के लिए, विशेष रूप से, यह वैकल्पिक संरचना वैक्टर के लिए पॉइंटर्स का वेक्टर होगा, प्रत्येक पंक्ति के लिए एक (सी या सी ++ पर पॉइंटर)। इस प्रकार एक सरणी ए के पंक्ति i और कॉलम जे में एक तत्व को डबल इंडेक्सिंग ([i] [जे] ठेठ नोटेशन में) द्वारा एक्सेस किया जाएगा। यह वैकल्पिक संरचना जंजीर सरणियों की अनुमति देती है, जहां प्रत्येक पंक्ति का एक अलग आकार हो सकता है - या, सामान्य रूप से, जहां प्रत्येक सूचकांक की मान्य सीमा सभी पूर्ववर्ती सूचकांकों के मूल्यों पर निर्भर करती है। यह एक गुणा (कॉलम एड्रेस इंक्रीमेंट द्वारा) को थोड़ा शिफ्ट (पंक्ति पॉइंटर्स [[ इलिफ़ वेक्टर ]] को इंडेक्स करने के लिए) और एक अतिरिक्त मेमोरी एक्सेस (पंक्ति पते को लाने) द्वारा प्रतिस्थापित करता है, जो कुछ आर्किटेक्चर में सार्थक हो सकता है।
[[Image:Array of array storage.svg|120px|left|एक द्वि-आयामी ऐरे को एक-आयामी ऐरे (पंक्तियों) के एक-आयामी ऐरे के रूप में संग्रहीत किया जाता है।]][[:hi:इलिफ वेक्टर|इलिफ़ वेक्टर]] एक बहुआयामी ऐरे संरचना का एक विकल्प है। यह एक आयाम कम के सरणियों के संदर्भ में एक आयामी ऐरे का उपयोग करता है। दो आयामों के लिए, विशेष रूप से, यह वैकल्पिक संरचना वेक्टर के पॉइंटर्स का वेक्टर होगा, प्रत्येक पंक्ति के लिए एक (सी या c++ पर सूचक)। इस प्रकार एक ऐरे ''A'' की पंक्ति ''i'' और कॉलम ''जे'' में एक तत्व को डबल इंडेक्सिंग ( ''A'' [ ''i'' ] [ ''J'' ] सामान्य नोटेशन में) द्वारा एक्सेस किया जाएगा। यह वैकल्पिक संरचना [[:hi:दांतेदार सरणी|जाग्गेड सरणियों]] की अनुमति देती है, जहां प्रत्येक पंक्ति का एक अलग आकार हो सकता है - या, सामान्य तौर पर, जहां प्रत्येक सूचकांक की मान्य सीमा सभी पूर्ववर्ती सूचकांकों के मूल्यों पर निर्भर करती है। यह एक गुणन (कॉलम एड्रेस इंक्रीमेंट द्वारा) को एक बिट शिफ्ट (पंक्ति पॉइंटर्स के वेक्टर को इंडेक्स करने के लिए) और एक अतिरिक्त मेमोरी एक्सेस (पंक्ति एड्रेस प्राप्त करना) से बचाता है, जो कुछ आर्किटेक्चर में सार्थक हो सकता है।


== आयाम ==
== आयाम ==
एक सरणी का आयाम एक तत्व का चयन करने के लिए आवश्यक सूचकांकों की संख्या है। इस प्रकार, यदि सरणी को संभावित सूचकांक संयोजनों के एक सेट पर एक फ़ंक्शन के रूप में देखा जाता है, तो यह उस स्थान का आयाम है जिसका डोमेन एक असतत उपसमुच्चय है। इस प्रकार एक-आयामी सरणी डेटा की एक सूची है, एक द्वि-आयामी सरणी डेटा का एक आयत है,<ref>{{Cite web|title=द्वि-आयामी सरणियाँ \ Processing.org|url=https://processing.org/tutorials/2darray/|website=processing.org|access-date=2020-05-01}}</ref> एक त्रि-आयामी सरणी डेटा का एक ब्लॉक, आदि।
एक ऐरे का आयाम तत्व का चयन करने के लिए आवश्यक सूचकांकों की संख्या है। इस प्रकार, यदि ऐरे को संभावित सूचकांक संयोजनों के एक सेट पर एक फ़ंक्शन के रूप में देखा जाता है, तो यह उस स्थान का आयाम है जिसका डोमेन एक असतत उपसमुच्चय है। इस प्रकार एक-आयामी ऐरे डेटा की एक सूची है, एक द्वि-आयामी ऐरे डेटा का एक आयत है,<ref>{{Cite web|title=द्वि-आयामी सरणियाँ \ Processing.org|url=https://processing.org/tutorials/2darray/|website=processing.org|access-date=2020-05-01}}</ref> एक त्रि-आयामी ऐरे डेटा का एक ब्लॉक, आदि।


यह किसी दिए गए डोमेन के साथ सभी मैट्रिक्स के सेट के आयाम के साथ भ्रमित नहीं होना चाहिए, अर्थात सरणी में तत्वों की संख्या। उदाहरण के लिए, 5 पंक्तियों और 4 स्तंभों वाला एक सरणी द्वि-आयामी है, लेकिन ऐसे मैट्रिक्स 20-आयामी स्थान बनाते हैं। इसी तरह, एक त्रि-आयामी वेक्टर को आकार तीन के एक-आयामी सरणी द्वारा दर्शाया जा सकता है।
यह किसी दिए गए डोमेन के साथ सभी मैट्रिक्स के सेट के आयाम के साथ भ्रमित नहीं होना चाहिए, अर्थात ऐरे में तत्वों की संख्या। उदाहरण के लिए, 5 पंक्तियों और 4 स्तंभों वाला एक ऐरे द्वि-आयामी है, लेकिन ऐसे मैट्रिक्स 20-आयामी स्थान बनाते हैं। इसी तरह, एक त्रि-आयामी वेक्टर को आकार तीन के एक-आयामी ऐरे द्वारा दर्शाया जा सकता है।


==यह भी देखें==
==यह भी देखें==
Line 178: Line 175:
{{Authority control}}
{{Authority control}}


{{DEFAULTSORT:Array Data Structure}}[[Category: सरणी|*]]
{{DEFAULTSORT:Array Data Structure}}
 


[[Category: Machine Translated Page]]
[[Category:AC with 0 elements|Array Data Structure]]
[[Category:Created On 13/11/2022]]
[[Category:Articles with hatnote templates targeting a nonexistent page|Array Data Structure]]
[[Category:Articles with short description|Array Data Structure]]
[[Category:CS1 errors]]
[[Category:Collapse templates|Array Data Structure]]
[[Category:Created On 13/11/2022|Array Data Structure]]
[[Category:Exclude in print|Array Data Structure]]
[[Category:Interwiki category linking templates|Array Data Structure]]
[[Category:Interwiki link templates|Array Data Structure]]
[[Category:Machine Translated Page|Array Data Structure]]
[[Category:Navigational boxes| ]]
[[Category:Navigational boxes without horizontal lists|Array Data Structure]]
[[Category:Pages with empty portal template|Array Data Structure]]
[[Category:Pages with script errors|Array Data Structure]]
[[Category:Portal templates with redlinked portals|Array Data Structure]]
[[Category:Short description with empty Wikidata description|Array Data Structure]]
[[Category:Sidebars with styles needing conversion|Array Data Structure]]
[[Category:Template documentation pages|Documentation/doc]]
[[Category:Templates generating microformats|Array Data Structure]]
[[Category:Templates that add a tracking category|Array Data Structure]]
[[Category:Templates that are not mobile friendly|Array Data Structure]]
[[Category:Templates using TemplateData|Array Data Structure]]
[[Category:Wikimedia Commons templates|Array Data Structure]]
[[Category:Wikipedia metatemplates|Array Data Structure]]
[[Category:सरणी|*]]

Latest revision as of 10:22, 22 November 2022

Array (data structure)
Array (data structure)


कंप्यूटर विज्ञान में, सरणी (ऐरे) एक डेटा संरचना है जिसमें अवयव (वैल्यूज या वेरिएबल्स) का संग्रह होता है, प्रत्येक को कम से कम एक ऐरे अनुक्रमणिका या कुंजी द्वारा पहचाना जाता है। एक ऐरे को इस तरह संग्रहीत किया जाता है कि प्रत्येक तत्व की स्थिति की गणना उसके सूचकांक टपल से गणितीय सूत्र द्वारा की जा सकती है।[1] [2] [3] सबसे सरल प्रकार की डेटा संरचना एक रेखीय ऐरे है, जिसे एक-आयामी ऐरे भी कहा जाता है।

उदाहरण के लिए, दस 32-बिट (4-बाइट) पूर्णांक चर की एक ऐरे, 0 से 9 के सूचकांक के साथ, मेमोरी एड्रेस 2000, 2004, 2008, ..., 2036, (हेक्साडेसिमल में: 0x7D0 ) पर दस शब्दों के रूप में संग्रहीत की जा सकती है। 0x7D4, 0x7D8, ..., 0x7F4 ) ताकि सूचकांक वाले तत्व का एड्रेस 2000 + (i × 4) हो।[4] किसी ऐरे के पहले तत्व के मेमोरी एड्रेस को फर्स्ट एड्रेस, फाउंडेशन एड्रेस या बेस एड्रेस कहा जाता है।

क्योंकि एक मैट्रिक्स की गणितीय अवधारणा को दो-आयामी ग्रिड के रूप में दर्शाया जा सकता है, द्वि-आयामी सरणियों को कभी-कभी "मैट्रिसेस" भी कहा जाता है। कुछ मामलों में "वेक्टर" शब्द का उपयोग एक ऐरे को संदर्भित करने के लिए कंप्यूटिंग में किया जाता है, हालांकि वैक्टर के बजाय ट्यूपल्स अधिक गणितीय रूप से सही समतुल्य हैं। टेबल्स को प्रायःसरणियों के रूप में कार्यान्वित किया जाता है, विशेष रूप से लुकअप टेबल, शब्द "टेबल" को कभी-कभी ऐरे के पर्याय के रूप में प्रयोग किया जाता है।

ऐरे सबसे पुरानी और सबसे महत्वपूर्ण डेटा संरचनाओं में से हैं, और लगभग हर प्रोग्राम द्वारा उपयोग की जाती हैं। उनका उपयोग कई अन्य डेटा संरचनाओं, जैसे सूचियों और स्ट्रिंग्स को लागू करने के लिए भी किया जाता है। वे कंप्यूटर के एड्रेसिंग लॉजिक का प्रभावी ढंग से दोहन करते हैं। अधिकांश आधुनिक कंप्यूटरों और कई बाहरी भंडारण उपकरणों में, मेमोरी शब्दों का एक आयामी ऐरे है, जिसका सूचक उनके एड्रेस हैं। प्रोसेसर, विशेष रूप से वेक्टर प्रोसेसर, प्रायःऐरे संचालन के लिए अनुकूलित होते हैं।

ऐरे अधिकतर उपयोगी होते हैं क्योंकि एलीमेंट इंडेक्स की गणना रन टाइम पर की जा सकती है। अन्य बातों के अलावा, यह सुविधा एकल पुनरावृत्त कथन को किसी ऐरे के मनमाने ढंग से कई तत्वों को संसाधित करने की अनुमति देती है। इस कारण से, एक ऐरे डेटा संरचना के तत्वों का आकार समान होना आवश्यक है और उन्हें समान डेटा प्रतिनिधित्व का उपयोग करना चाहिए। वैध सूचकांक टुपल्स का सेट और तत्वों के एड्रेस (और इसलिए तत्व को संबोधित करने वाले सूत्र) सामान्यतः,[5] [6] होते हैं, लेकिन सदैव नहीं, [7] निश्चित होते हैं जबकि ऐरे उपयोग में होती है।

शब्द "ऐरे" एक ऐरे डेटा प्रकार को भी संदर्भित कर सकता है, एक प्रकार का डेटा प्रकार जो अधिकांश उच्च-स्तरीय प्रोग्रामिंग भाषाओं द्वारा प्रदान किया जाता है जिसमें मानों या चर का एक संग्रह होता है जिसे रन-टाइम पर गणना किए गए एक या अधिक सूचकांकों द्वारा चुना जा सकता है। ऐरे प्रकार प्रायःऐरे संरचनाओं द्वारा कार्यान्वित किए जाते हैं; हालाँकि, कुछ भाषाओं में उन्हें हैश टेबल, लिंक्ड लिस्ट, सर्च ट्री या अन्य डेटा संरचनाओं द्वारा लागू किया जा सकता है।

इस शब्द का प्रयोग विशेष रूप से एल्गोरिदम के वर्णन में भी किया जाता है, जिसका अर्थ सहयोगी ऐरे या "अमूर्त ऐरे" है, एक सैद्धांतिक कंप्यूटर विज्ञान मॉडल (एक सार डेटा प्रकार या एडीटी) जिसका उद्देश्य ऐरे के आवश्यक गुणों को पकड़ना है।

इतिहास

पहले डिजिटल कंप्यूटरों ने डेटा टेबल, वेक्टर और मैट्रिक्स कंप्यूटेशंस और कई अन्य उद्देश्यों के लिए ऐरे संरचनाओं को सेट अप और एक्सेस करने के लिए मशीन-भाषा प्रोग्रामिंग का इस्तेमाल किया। जॉन वॉन न्यूमैन ने 1945 में पहले स्टोर्ड-प्रोग्राम कंप्यूटर के निर्माण के दौरान पहला एरे-सॉर्टिंग प्रोग्राम (मर्ज सॉर्ट) लिखा था। [8] पृ. 159 ऐरे इंडेक्सिंग मूल रूप से स्व-संशोधित कोड द्वारा किया गया था, और बाद में इंडेक्स रजिस्टरों और अप्रत्यक्ष एड्रेसिंग का उपयोग करके किया गया था। 1960 के दशक में डिज़ाइन किए गए कुछ मेनफ्रेम, जैसे बरोज़ B5000 और इसके उत्तराधिकारी, हार्डवेयर में इंडेक्स-बाउंड जाँच करने के लिए मेमोरी सेगमेंटेशन का उपयोग करते थे।[9]

असेम्बली भाषाओं में आम तौर पर सरणियों के लिए कोई विशेष समर्थन नहीं होता है, सिवाय इसके कि मशीन स्वयं क्या प्रदान करती है। फोरट्रान (1957), लिस्प (1958), COBOL (1960), और ALGOL 60 (1960) सहित शुरुआती उच्च-स्तरीय प्रोग्रामिंग भाषाओं में बहु-आयामी सरणियों के लिए समर्थन था, और इसलिए C (1972) है। C++ (1983) में, बहु-आयामी सरणियों के लिए वर्ग टेम्पलेट मौजूद हैं जिनके आयाम रनटाइम[10] [11] के साथ-साथ रनटाइम-फ्लेक्सिबल सरणियों के लिए तय किए गए हैं।[12]

अनुप्रयोग

ऐरे का उपयोग गणितीय वैक्टर और मैट्रिसेस के साथ-साथ अन्य प्रकार की आयताकार तालिकाओं को लागू करने के लिए किया जाता है। कई डेटाबेस, छोटे और बड़े, एक-आयामी सरणियों से युक्त या सम्मिलित होते हैं जिनके तत्व रिकॉर्ड होते हैं।

अन्य डेटा संरचनाओं को लागू करने के लिए Arrays का उपयोग किया जाता है, जैसे कि सूचियाँ, हीप, हैश टेबल, डेक, क्यूएस, स्टॉक्स, स्ट्रिंग्स और वी लिस्ट। अन्य डेटा संरचनाओं के ऐरे-आधारित कार्यान्वयन प्रायःसरल और अंतरिक्ष-कुशल ( निहित डेटा संरचनाएं ) होते हैं, जिनके लिए बहुत कम जगह की आवश्यकता होती है, लेकिन ट्री-आधारित डेटा संरचनाओं की तुलना में खराब स्थान जटिलता हो सकती है, खासकर जब संशोधित हो (क्रमबद्ध ऐरे की तुलना एक सर्च ट्री से करें)।

एक या अधिक बड़े सरणियों का उपयोग कभी-कभी इन-प्रोग्राम डायनेमिक मेमोरी आवंटन, विशेष रूप से मेमोरी पूल आवंटन का अनुकरण करने के लिए किया जाता है। ऐतिहासिक रूप से, यह कभी-कभी "गतिशील मेमोरी" को आंशिक रूप से आवंटित करने का एकमात्र तरीका रहा है।

कार्यक्रमों में आंशिक या पूर्ण नियंत्रण प्रवाह को निर्धारित करने के लिए ऐरे का उपयोग किया जा सकता है, एक कॉम्पैक्ट विकल्प के रूप में (अन्यथा दोहरावदार) एकाधिक IF कथन। वे इस संदर्भ में नियंत्रण तालिकाओं के रूप में जाने जाते हैं और एक उद्देश्य से निर्मित दुभाषिया के संयोजन के साथ उपयोग किए जाते हैं जिनके नियंत्रण प्रवाह को ऐरे में निहित मानों के अनुसार बदल दिया जाता है। ऐरे में सबरूटीन पॉइंटर्स (या रिश्तेदार सबरूटीन संख्याएँ जो स्विच (SWITCH') स्टेटमेंट द्वारा क्रियान्वित की जा सकती हैं) हो सकती हैं जो निष्पादन के मार्ग को निर्देशित करती हैं।

तत्व पहचानकर्ता और एड्रेस सूत्र

जब डेटा ऑब्जेक्ट्स को एक ऐरे में संग्रहीत किया जाता है, तो अलग-अलग ऑब्जेक्ट्स को इंडेक्स द्वारा चुना जाता है जो सामान्यतः एक गैर-ऋणात्मक स्केलर पूर्णांक होता है। इंडेक्स को सबस्क्रिप्ट भी कहा जाता है। एक इंडेक्स ऐरे मान को संग्रहीत ऑब्जेक्ट में मैप करता है।

किसी ऐरे के तत्वों को अनुक्रमित करने के तीन तरीके हैं:

0 (शून्य-आधारित क्रमांकन | शून्य-आधारित अनुक्रमण)
ऐरे का पहला तत्व 0 की सबस्क्रिप्ट द्वारा अनुक्रमित किया जाता है।[13]
1 (एक-आधारित अनुक्रमण)
ऐरे का पहला तत्व 1 की सबस्क्रिप्ट द्वारा अनुक्रमित किया जाता है।
n (n-आधारित अनुक्रमण)
शून्य आधारित इंडेक्सिंग का उपयोग सी, जावा और लिस्प सहित कई प्रभावशाली प्रोग्रामिंग भाषाओं की डिजाइन पसंद है। यह सरल कार्यान्वयन की ओर जाता है जहां सबस्क्रिप्ट एक ऐरे की शुरुआती स्थिति से ऑफ़सेट को संदर्भित करता है, इसलिए पहले तत्व में शून्य का ऑफ़सेट होता है।

सारणियों के कई आयाम हो सकते हैं, इस प्रकार एक से अधिक सूचकांकों का उपयोग करके किसी ऐरे तक पहुंचना असामान्य नहीं है। उदाहरण के लिए, तीन पंक्तियों और चार स्तंभों वाला एक द्वि-आयामी ऐरे A शून्य-आधारित अनुक्रमण प्रणाली के मामले में अभिव्यक्ति A[1][3] द्वारा दूसरी पंक्ति और चौथे स्तंभ पर तत्व तक पहुंच प्रदान कर सकता है। इस प्रकार दो सूचकांकों का उपयोग द्वि-आयामी ऐरे के लिए किया जाता है, तीन तीन-आयामी ऐरे के लिए, और n - n -आयामी ऐरे के लिए किया जाता है।

किसी तत्व को निर्दिष्ट करने के लिए आवश्यक सूचकांकों की संख्या को ऐरे का आयाम, आयाम या रैंक कहा जाता है।

मानक सरणियों में, प्रत्येक सूचकांक लगातार पूर्णांकों (या कुछ प्रगणित प्रकार के लगातार मूल्यों) की एक निश्चित सीमा तक सीमित होता है, और एक तत्व का एड्रेस सूचकांकों पर "रैखिक" सूत्र द्वारा गणना किया जाता है।

आयामी सरणियाँ

आयामी ऐरे (या एकल आयाम ऐरे) रैखिक ऐरे का एक प्रकार है। इसके तत्वों तक पहुँचने में एक एकल सबस्क्रिप्ट सम्मिलित है जो या तो एक पंक्ति या स्तंभ अनुक्रमणिका का प्रतिनिधित्व कर सकता है।

उदाहरण के रूप में C डिक्लेरेशन int anArrayName[10]; जो दस पूर्णांकों की एक आयामी ऐरे घोषित करता है। यहां, ऐरे int प्रकार के दस तत्वों को संग्रहीत कर सकती है। इस ऐरे में शून्य से लेकर नौ तक के सूचकांक हैं। उदाहरण के लिए, अभिव्यक्ति anArrayName[0] और anArrayName[9] क्रमशः पहले और अंतिम तत्व हैं।

रैखिक एड्रेसिंग वाले वेक्टर के लिए, इंडेक्स i वाला तत्व B + c × i एड्रेस पर स्थित है, जहां B एक निश्चित आधार एड्रेस है और c एक निश्चित स्थिरांक है, जिसे कभी-कभी एड्रेस इंक्रीमेंट या स्ट्राइड कहा जाता है।

यदि मान्य तत्व सूचकांक 0 से आरंभ होते हैं, तो स्थिरांक B केवल ऐरे के पहले तत्व का एड्रेस है। इस कारण से, सी प्रोग्रामिंग भाषा निर्दिष्ट करती है कि ऐरे सूचकांक सदैव 0 से आरंभ होते हैं; और कई प्रोग्रामर उस तत्व को "फर्स्ट" के बजाय " ज़ीरोथ " कहेंगे।

हालांकि, आधार एड्रेस B के उचित विकल्प से कोई भी पहले तत्व की अनुक्रमणिका चुन सकता है। उदाहरण के लिए, यदि ऐरे में पाँच तत्व हैं, जिन्हें 1 से 5 तक अनुक्रमित किया गया है, और आधार एड्रेस B को B + 30c से बदल दिया गया है, तो उन्हीं तत्वों के सूचकांक 31 से 35 होंगे। यदि क्रमांकन 0 से आरंभ नहीं होता है, तो अचर B किसी भी तत्व का एड्रेस नहीं हो सकता है।

बहुआयामी सरणियाँ

बहुआयामी ऐरे के लिए, सूचकांक i, j वाले तत्व का एड्रेस B + c · i + d · j होगा, जहां गुणांक c और d क्रमशः पंक्ति और स्तंभ एड्रेस वृद्धि हैं।

अधिक आम तौर पर, k -आयामी ऐरे में, सूचकांक i 1, i 2, ..., i k वाले तत्व का एड्रेस है

B + c1 · i1 + c2 · i2 + … + ck · ik.

उदाहरण के लिए: int a[2][3];

इसका अर्थ है कि ऐरे a में 2 पंक्तियाँ और 3 स्तंभ हैं, और ऐरे पूर्णांक प्रकार की है। यहां हम 6 तत्वों को स्टोर कर सकते हैं जिन्हें वे रैखिक रूप से संग्रहीत करेंगे लेकिन पहली पंक्ति रैखिक से आरंभहोकर दूसरी पंक्ति के साथ जारी रहेंगे। उपरोक्त ऐरे को 11, a 12, a 13, a 21, a 22, a 23 के रूप में संग्रहीत किया जाएगा।

इस सूत्र को मेमोरी में फ़िट होने वाले किसी भी ऐरे के लिए केवल k गुणन और k परिवर्धन की आवश्यकता होती है। इसके अलावा, यदि कोई गुणांक 2 की निश्चित शक्ति है, तो गुणन को बिटवाइज़ ऑपरेशन द्वारा प्रतिस्थापित किया जा सकता है।

गुणांक c k को चुना जाना चाहिए ताकि प्रत्येक मान्य इंडेक्स टपल एक विशिष्ट तत्व के एड्रेस पर मैप हो।

यदि प्रत्येक सूचकांक का न्यूनतम वैधानिक मान 0 है, तो B उस तत्व का एड्रेस है जिसके सभी सूचकांक शून्य हैं। जैसा कि एक आयामी मामले में, आधार एड्रेस B बदलकर तत्व सूचकांकों को बदला जा सकता है। इस प्रकार, यदि एक द्वि-आयामी ऐरे में पंक्तियों और स्तंभों को क्रमशः 1 से 10 और 1 से 20 तक अनुक्रमित किया गया है, तो B को B + c1 − 3c2 से प्रतिस्थापित करने पर उन्हें 0 से 9 और 4 से 23 तक फिर से क्रमांकित किया जाएगा।, क्रमश। इस सुविधा का लाभ उठाते हुए, कुछ भाषाएँ (जैसे फोरट्रान 77) निर्दिष्ट करती हैं कि ऐरे सूचकांक 1 से शुरू होते हैं, जैसा कि गणितीय परंपरा में होता है, जबकि अन्य भाषाएँ (जैसे फोरट्रान 90, पास्कल और अल्गोल) उपयोगकर्ता को प्रत्येक सूचकांक के लिए न्यूनतम मान चुनने देती हैं।

डोप वैक्टर

एड्रेसिंग फॉर्मूला पूरी तरह से आयाम डी, आधार एड्रेस B, और वृद्धि सी द्वारा परिभाषित किया गया है c1, c2, ..., ck. इन मापदंडों को ऐरे के डिस्क्रिप्टर या स्ट्राइड वेक्टर या डोप वेक्टर नामक रिकॉर्ड में पैक करना प्रायःउपयोगी होता है।[14][15] प्रत्येक तत्व का आकार, और प्रत्येक सूचकांक के लिए अनुमत न्यूनतम और अधिकतम मान भी डोप वेक्टर में सम्मिलित किए जा सकते हैं। डोप वेक्टर ऐरे के लिए एक पूर्ण संभाल (कंप्यूटिंग) है, और सबरूटीन के तर्क के रूप में सरणियों को पारित करने का एक सुविधाजनक तरीका है। डोप वेक्टर में हेर-फेर करके कई उपयोगी ऐरे टुकड़ा करना ऑपरेशंस (जैसे कि सब-एरे का चयन करना, इंडेक्स को स्वैप करना, या इंडेक्स की दिशा को उलटना) बहुत कुशलता से किया जा सकता है।[14]

कॉम्पैक्ट लेआउट

प्रायःगुणांक चुने जाते हैं ताकि तत्व मेमोरी के एक सन्निहित क्षेत्र पर अधिकार कर लें। हालांकि, ऐसा जरूरी नहीं है। यहां तक ​​​​कि अगर सरणियाँ सदैव सन्निहित तत्वों के साथ बनाई जाती हैं, तो कुछ ऐरे स्लाइसिंग ऑपरेशन उनसे गैर-सन्निहित उप-ऐरे बना सकते हैं।

पंक्ति- और स्तंभ-प्रमुख क्रम का चित्रण

द्वि-आयामी ऐरे के लिए दो व्यवस्थित कॉम्पैक्ट लेआउट हैं। उदाहरण के लिए, मैट्रिक्स पर विचार करें

पंक्ति-प्रमुख क्रम लेआउट में (सांख्यिकीय रूप से घोषित सरणियों के लिए C द्वारा अपनाया गया), प्रत्येक पंक्ति में तत्वों को लगातार स्थिति में संग्रहीत किया जाता है और एक पंक्ति के सभी तत्वों का एड्रेस लगातार पंक्ति के किसी भी तत्व से कम होता है:

1 2 3 4 5 6 7 8 9

कॉलम-मेजर ऑर्डर (पारंपरिक रूप से फोरट्रान द्वारा उपयोग किया जाता है) में, प्रत्येक कॉलम में तत्व मेमोरी में लगातार होते हैं और कॉलम के सभी तत्वों का लगातार कॉलम के किसी भी तत्व की तुलना में कम एड्रेस होता है:

1 4 7 2 5 8 3 6 9

तीन या अधिक सूचकांकों के साथ सरणियों के लिए, "पंक्ति प्रमुख क्रम" किसी भी दो तत्वों को लगातार स्थिति में रखता है जिनके सूचकांक टुपल्स अंतिम सूचकांक में केवल एक से भिन्न होते हैं। "कॉलम प्रमुख क्रम" पहली अनुक्रमणिका के संबंध में समान है।

सिस्टम में जो प्रोसेसर कैश या वर्चुअल मेमोरी का उपयोग करते हैं, एक ऐरे को स्कैन करना बहुत तेज होता है यदि लगातार तत्वों को मेमोरी में लगातार स्थिति में संग्रहीत किया जाता है, बजाय कम बिखरे हुए। कई एल्गोरिदम जो बहुआयामी सरणियों का उपयोग करते हैं, उन्हें एक पूर्वानुमानित क्रम में स्कैन करेंगे। एक प्रोग्रामर (या एक परिष्कृत संकलक) इस जानकारी का उपयोग प्रत्येक ऐरे के लिए पंक्ति-या स्तंभ-प्रमुख लेआउट के बीच चयन करने के लिए कर सकता है। उदाहरण के लिए, दो आव्यूहों के उत्पाद A · B की गणना करते समय, A को पंक्ति-प्रमुख क्रम में और B को स्तंभ-प्रमुख क्रम में संग्रहित करना सबसे अच्छा होगा।।

आकार बदलना (रिसाइजिंग)

स्थैतिक सरणियों का एक आकार होता है जो उनके बनाए जाने पर तय होता है और फलस्वरूप तत्वों को सम्मिलित या निकालने की अनुमति नहीं देता है। हालाँकि, एक नई ऐरे आवंटित करके और पुराने ऐरे की सामग्री को इसमें कॉपी करके, किसी ऐरे के गतिशील संस्करण को प्रभावी ढंग से लागू करना संभव है; गतिशील ऐरे देखें। यदि यह ऑपरेशन बार-बार किया जाता है, तो ऐरे के अंत में सम्मिलन के लिए केवल परिशोधित निरंतर समय की आवश्यकता होती है।

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

गैर-रैखिक सूत्र

अधिक जटिल (गैर-रैखिक) सूत्र कभी-कभी उपयोग किए जाते हैं। उदाहरण के लिए, एक कॉम्पैक्ट द्वि-आयामी त्रिकोणीय ऐरे के लिए, एड्रेसिंग फॉर्मूला डिग्री 2 का बहुपद है।

दक्षता

स्टोर और चयन दोनों (नियतात्मक सबसे खराब स्थिति) निरंतर समय लेते हैं। सरणियाँ n तत्वों की संख्या में रैखिक (O ( n )) स्थान लेती हैं जिन्हें वे धारण करते हैं।

तत्व आकार k के साथ एक ऐरे में और B बाइट्स के कैश लाइन आकार वाली मशीन पर, n तत्वों की एक ऐरे के माध्यम से पुनरावृति के लिए न्यूनतम सीलिंग ( nk /B) कैश मिस की आवश्यकता होती है, क्योंकि इसके तत्व सन्निहित मेमोरी स्थानों पर कब्जा कर लेते हैं। यादृच्छिक मेमोरी स्थानों पर एन तत्वों तक पहुंचने के लिए आवश्यक कैश मिस की संख्या की तुलना में यह लगभग बी /के का एक कारक है। परिणामस्वरूप, एक ऐरे पर अनुक्रमिक पुनरावृत्ति कई अन्य डेटा संरचनाओं पर पुनरावृत्ति की तुलना में अभ्यास में काफी तेज है, एक संपत्ति जिसे संदर्भ की स्थानीयता कहा जाता है (इसका मतलब यह नहीं है कि एक ही (स्थानीय) ऐरे के भीतर एक पूर्ण हैश या तुच्छ हैश का उपयोग करना, और भी तेज़ नहीं होगा - और निरंतर समय में प्राप्त करने योग्य)। पुस्तकालय मेमोरी की श्रेणियों (जैसे memcpy ) की प्रतिलिपि बनाने के लिए निम्न-स्तरीय अनुकूलित सुविधाएं प्रदान करते हैं, जिनका उपयोग ऐरे तत्वों के सन्निहित ब्लॉकों को व्यक्तिगत तत्व पहुंच के माध्यम से प्राप्त करने की तुलना में काफी तेजी से किया जा सकता है। इस तरह के अनुकूलित रूटीन का स्पीडअप ऐरे तत्व आकार, आर्किटेक्चर और कार्यान्वयन से भिन्न होता है।

मेमोरी-वार, सरणियाँ कॉम्पैक्ट डेटा संरचनाएं हैं जिनमें कोई प्रति-तत्व कम्प्यूटेशनल ओवरहेड नहीं है। प्रति-ऐरे ओवरहेड हो सकता है (उदाहरण के लिए, अनुक्रमणिका सीमाओं को संग्रहीत करने के लिए) लेकिन यह भाषा-निर्भर है। यह भी हो सकता है कि एक ऐरे में संग्रहीत तत्वों को अलग-अलग चर में संग्रहीत समान तत्वों की तुलना में कम मेमोरी की आवश्यकता होती है, क्योंकि कई ऐरे तत्वों को एक ही शब्द (डेटा प्रकार) में संग्रहीत किया जा सकता है; ऐसे सरणियों को प्रायःपैक्ड सरणियाँ कहा जाता है। एक चरम (लेकिन सामान्यतः इस्तेमाल किया जाने वाला) मामला बिट ऐरे है, जहां प्रत्येक बिट एक तत्व का प्रतिनिधित्व करता है। इस प्रकार एक एकल ऑक्टेट (कंप्यूटिंग) सबसे कॉम्पैक्ट रूप में, अधिकतम 8 विभिन्न स्थितियों के 256 विभिन्न संयोजनों को धारण कर सकता है।

स्टैटिकली प्रेडिक्टेबल एक्सेस पैटर्न के साथ ऐरे एक्सेस डेटा समानता का एक प्रमुख स्रोत है।

अन्य डेटा संरचनाओं के साथ तुलना

डायनेमिक सरणियाँ या बढ़ने योग्य सरणियाँ सरणियों के समान होती हैं लेकिन तत्वों को सम्मिलित करने और हटाने की क्षमता जोड़ती हैं; अंत में जोड़ना और हटाना विशेष रूप से कुशल है। हालांकि, वे रैखिक (Θ (n)) अतिरिक्त संग्रहण आरक्षित करते हैं, जबकि सरणियाँ अतिरिक्त संग्रहण आरक्षित नहीं करती हैं।

साहचर्य सरणियाँ विशाल भंडारण ओवरहेड्स के बिना ऐरे जैसी कार्यक्षमता के लिए एक तंत्र प्रदान करती हैं जब सूचकांक मान विरल होते हैं। उदाहरण के लिए, एक ऐरे जिसमें केवल इंडेक्स 1 और 2 बिलियन के मान होते हैं, ऐसी संरचना का उपयोग करने से लाभान्वित हो सकते हैं। पूर्णांक कुंजियों के साथ विशिष्ट साहचर्य सरणियों में पेट्रीसिया ट्राई, जूडी सरणियाँ और वैन एम्डे बोस ट्री सम्मिलित हैं।

संतुलित ट्री को अनुक्रमित पहुंच के लिए O(log n ) समय की आवश्यकता होती है, लेकिन O(log n ) समय में तत्वों को सम्मिलित करने या हटाने की भी अनुमति होती है,[16] जबकि बढ़ने योग्य सरणियों को रैखिक (Θ( n )) समय की आवश्यकता होती है ताकि तत्वों को सम्मिलित या हटाया जा सके।

लिंक्ड सूचियां बीच में निरंतर समय हटाने और सम्मिलन की अनुमति देती हैं लेकिन अनुक्रमित पहुंच के लिए रैखिक समय लेती हैं। उनकी मेमोरी उपयोग सामान्यतः सरणियों से भी बदतर है, लेकिन फिर भी रैखिक है।

एक द्वि-आयामी ऐरे को एक-आयामी ऐरे (पंक्तियों) के एक-आयामी ऐरे के रूप में संग्रहीत किया जाता है।

इलिफ़ वेक्टर एक बहुआयामी ऐरे संरचना का एक विकल्प है। यह एक आयाम कम के सरणियों के संदर्भ में एक आयामी ऐरे का उपयोग करता है। दो आयामों के लिए, विशेष रूप से, यह वैकल्पिक संरचना वेक्टर के पॉइंटर्स का वेक्टर होगा, प्रत्येक पंक्ति के लिए एक (सी या c++ पर सूचक)। इस प्रकार एक ऐरे A की पंक्ति i और कॉलम जे में एक तत्व को डबल इंडेक्सिंग ( A [ i ] [ J ] सामान्य नोटेशन में) द्वारा एक्सेस किया जाएगा। यह वैकल्पिक संरचना जाग्गेड सरणियों की अनुमति देती है, जहां प्रत्येक पंक्ति का एक अलग आकार हो सकता है - या, सामान्य तौर पर, जहां प्रत्येक सूचकांक की मान्य सीमा सभी पूर्ववर्ती सूचकांकों के मूल्यों पर निर्भर करती है। यह एक गुणन (कॉलम एड्रेस इंक्रीमेंट द्वारा) को एक बिट शिफ्ट (पंक्ति पॉइंटर्स के वेक्टर को इंडेक्स करने के लिए) और एक अतिरिक्त मेमोरी एक्सेस (पंक्ति एड्रेस प्राप्त करना) से बचाता है, जो कुछ आर्किटेक्चर में सार्थक हो सकता है।

आयाम

एक ऐरे का आयाम तत्व का चयन करने के लिए आवश्यक सूचकांकों की संख्या है। इस प्रकार, यदि ऐरे को संभावित सूचकांक संयोजनों के एक सेट पर एक फ़ंक्शन के रूप में देखा जाता है, तो यह उस स्थान का आयाम है जिसका डोमेन एक असतत उपसमुच्चय है। इस प्रकार एक-आयामी ऐरे डेटा की एक सूची है, एक द्वि-आयामी ऐरे डेटा का एक आयत है,[17] एक त्रि-आयामी ऐरे डेटा का एक ब्लॉक, आदि।

यह किसी दिए गए डोमेन के साथ सभी मैट्रिक्स के सेट के आयाम के साथ भ्रमित नहीं होना चाहिए, अर्थात ऐरे में तत्वों की संख्या। उदाहरण के लिए, 5 पंक्तियों और 4 स्तंभों वाला एक ऐरे द्वि-आयामी है, लेकिन ऐसे मैट्रिक्स 20-आयामी स्थान बनाते हैं। इसी तरह, एक त्रि-आयामी वेक्टर को आकार तीन के एक-आयामी ऐरे द्वारा दर्शाया जा सकता है।

यह भी देखें


संदर्भ

  1. Black, Paul E. (13 November 2008). "array". Dictionary of Algorithms and Data Structures. National Institute of Standards and Technology. Retrieved 22 August 2010.
  2. Bjoern Andres; Ullrich Koethe. "Runtime-Flexible Multi-dimensional Arrays and Views for C++98 and C++0x". arXiv:1008.2909 [cs.DS].
  3. Garcia, Ronald; Lumsdaine, Andrew (2005). "MultiArray: a C++ library for generic programming with arrays". Software: Practice and Experience. 35 (2): 159–188. doi:10.1002/spe.630. ISSN 0038-0644.
  4. David R. Richardson (2002), The Book on Data Structures. iUniverse, 112 pages. ISBN 0-595-24039-9, ISBN 978-0-595-24039-5.
  5. Garcia, Ronald; Lumsdaine, Andrew (2005). "MultiArray: a C++ library for generic programming with arrays". Software: Practice and Experience. 35 (2): 159–188. doi:10.1002/spe.630. ISSN 0038-0644.
  6. {{cite conference}}: Empty citation (help)
  7. Bjoern Andres; Ullrich Koethe. "Runtime-Flexible Multi-dimensional Arrays and Views for C++98 and C++0x". arXiv:1008.2909 [cs.DS].
  8. Donald Knuth, The Art of Computer Programming, vol. 3. Addison-Wesley
  9. Levy, Henry M. (1984), Capability-based Computer Systems, Digital Press, p. 22, ISBN 9780932376220.
  10. Garcia, Ronald; Lumsdaine, Andrew (2005). "MultiArray: a C++ library for generic programming with arrays". Software: Practice and Experience. 35 (2): 159–188. doi:10.1002/spe.630. ISSN 0038-0644.
  11. {{cite conference}}: Empty citation (help)
  12. Bjoern Andres; Ullrich Koethe. "Runtime-Flexible Multi-dimensional Arrays and Views for C++98 and C++0x". arXiv:1008.2909 [cs.DS].
  13. "सरणी कोड उदाहरण - PHP सरणी कार्य - PHP कोड". Computer Programming Web programming Tips. Archived from the original on 13 April 2011. Retrieved 8 April 2011. अधिकांश कंप्यूटर भाषाओं में सरणी अनुक्रमणिका (गिनती) 0 से शुरू होती है, 1 से नहीं। सरणी के पहले तत्व का सूचकांक 0 है, सरणी के दूसरे तत्व का सूचकांक 1 है, और इसी तरह। नीचे दिए गए नामों की सरणी में आप अनुक्रमणिका और मान देख सकते हैं।
  14. 14.0 14.1 Bjoern Andres; Ullrich Koethe; Thorben Kroeger; Hamprecht (2010). "C++98 और C++0x . के लिए रनटाइम-लचीले बहु-आयामी सरणी और दृश्य". arXiv:1008.2909 [cs.DS].
  15. Garcia, Ronald; Lumsdaine, Andrew (2005). "मल्टीएरे: सरणियों के साथ सामान्य प्रोग्रामिंग के लिए एक सी ++ पुस्तकालय". Software: Practice and Experience. 35 (2): 159–188. doi:10.1002/spe.630. ISSN 0038-0644. S2CID 10890293.
  16. "Counted B-Trees".
  17. "द्वि-आयामी सरणियाँ \ Processing.org". processing.org. Retrieved 2020-05-01.


बाहरी संबंध