ऐरे (डेटा स्ट्रक्चर): Difference between revisions
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}} | ||
[[File:The NumPy array data structure and its associated metadata fields.webp|alt=Array (data structure)|thumb|Array (data structure)]] | |||
[[: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> सबसे सरल प्रकार की डेटा संरचना एक रेखीय ऐरे है, जिसे एक-आयामी ऐरे भी कहा जाता है। | |||
उदाहरण के लिए, दस [[: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> किसी ऐरे के पहले तत्व के मेमोरी एड्रेस को फर्स्ट एड्रेस, फाउंडेशन एड्रेस या बेस एड्रेस कहा जाता है। | |||
क्योंकि एक [[: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 के दशक में डिज़ाइन किए गए कुछ मेनफ्रेम, जैसे [[बरोज़ B5000]] और इसके उत्तराधिकारी, हार्डवेयर में इंडेक्स-बाउंड जाँच करने के लिए [[:hi:स्मृति विभाजन|मेमोरी सेगमेंटेशन]] का उपयोग करते थे।<ref>{{Citation|title=Capability-based Computer Systems|first=Henry M.|last=Levy|publisher=Digital Press|year=1984|isbn=9780932376220|page=22}}.</ref> | ||
असेम्बली भाषाओं में आम तौर पर सरणियों के लिए कोई विशेष समर्थन नहीं होता है, सिवाय इसके कि मशीन स्वयं क्या प्रदान करती है। [[: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 का उपयोग किया जाता है, जैसे कि सूचियाँ, हीप | अन्य डेटा संरचनाओं को लागू करने के लिए Arrays का उपयोग किया जाता है, जैसे कि सूचियाँ, [[:hi:हीप|हीप]], [[:hi:हैश टेबल|हैश टेबल]], [[:hi:डबल-एंडेड कतार|डेक]], [[:hi:कतार (डेटा संरचना)|क्यूएस]], [[:hi:ढेर (सार जानकारी प्रकार)|स्टॉक्स]], [[:hi:स्ट्रिंग (संगणन)|स्ट्रिंग्स]] और [[वी लिस्ट]]। अन्य डेटा संरचनाओं के ऐरे-आधारित कार्यान्वयन प्रायःसरल और अंतरिक्ष-कुशल ( निहित डेटा संरचनाएं ) होते हैं, जिनके लिए बहुत कम जगह की आवश्यकता होती [[:hi:ओवरहेड (कंप्यूटिंग)|है]], लेकिन ट्री-आधारित डेटा संरचनाओं की तुलना में खराब स्थान जटिलता हो सकती है, खासकर जब संशोधित हो (क्रमबद्ध ऐरे की तुलना एक सर्च ट्री से करें)। | ||
एक या अधिक बड़े सरणियों का उपयोग कभी-कभी इन-प्रोग्राम डायनेमिक मेमोरी आवंटन, विशेष रूप से [[ मेमोरी पूल ]] आवंटन का अनुकरण करने के लिए किया जाता है। ऐतिहासिक रूप से, यह कभी-कभी गतिशील | एक या अधिक बड़े सरणियों का उपयोग कभी-कभी इन-प्रोग्राम [[डायनेमिक मेमोरी आवंटन]], विशेष रूप से [[:hi:मेमोरी पूल|मेमोरी पूल]] आवंटन का अनुकरण करने के लिए किया जाता है। ऐतिहासिक रूप से, यह कभी-कभी "गतिशील मेमोरी" को आंशिक रूप से आवंटित करने का एकमात्र तरीका रहा है। | ||
कार्यक्रमों में आंशिक या पूर्ण नियंत्रण प्रवाह निर्धारित करने के लिए | कार्यक्रमों में आंशिक या पूर्ण [[नियंत्रण प्रवाह]] को निर्धारित करने के लिए ऐरे का उपयोग किया जा सकता है, एक कॉम्पैक्ट विकल्प के रूप में (अन्यथा दोहरावदार) एकाधिक <code>IF</code> कथन। वे इस संदर्भ में नियंत्रण तालिकाओं के रूप में जाने जाते हैं और एक उद्देश्य से निर्मित दुभाषिया के संयोजन के साथ उपयोग किए जाते हैं जिनके नियंत्रण प्रवाह को ऐरे में निहित मानों के अनुसार बदल दिया जाता है। ऐरे में [[सबरूटीन]] [[:hi:पाइंटर (प्रोग्रामिंग)|पॉइंटर्स]] (या रिश्तेदार सबरूटीन संख्याएँ जो [[:hi:स्विच स्टेटमेंट|स्विच (SWITCH')]] स्टेटमेंट द्वारा क्रियान्वित की जा सकती हैं) हो सकती हैं जो निष्पादन के मार्ग को निर्देशित करती हैं। | ||
==तत्व पहचानकर्ता और | ==तत्व पहचानकर्ता और एड्रेस सूत्र == | ||
जब डेटा | जब डेटा ऑब्जेक्ट्स को एक ऐरे में संग्रहीत किया जाता है, तो अलग-अलग ऑब्जेक्ट्स को इंडेक्स द्वारा चुना जाता है जो सामान्यतः एक गैर-ऋणात्मक [[:hi:अदिश (कंप्यूटिंग)|स्केलर]] [[:hi:पूर्णांक|पूर्णांक होता]] है। इंडेक्स को सबस्क्रिप्ट भी कहा जाता है। एक इंडेक्स ऐरे मान को संग्रहीत ऑब्जेक्ट में ''मैप'' करता है। | ||
किसी | किसी ऐरे के तत्वों को अनुक्रमित करने के तीन तरीके हैं: | ||
; 0 (शून्य-आधारित क्रमांकन | शून्य-आधारित अनुक्रमण): | ; 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 की सबस्क्रिप्ट द्वारा अनुक्रमित किया जाता है। | ||
; n (n-आधारित अनुक्रमण): | ; n (n-आधारित अनुक्रमण): शून्य आधारित इंडेक्सिंग का उपयोग [[:hi:सी (प्रोग्रामिंग भाषा)|सी]], [[:hi:जावा (प्रोग्रामिंग भाषा)|जावा]] और [[:hi:लिस्प (प्रोग्रामिंग भाषा)|लिस्प]] सहित कई प्रभावशाली प्रोग्रामिंग भाषाओं की डिजाइन पसंद है। यह सरल कार्यान्वयन की ओर जाता है जहां सबस्क्रिप्ट एक ऐरे की शुरुआती स्थिति से ऑफ़सेट को संदर्भित करता है, इसलिए पहले तत्व में शून्य का ऑफ़सेट होता है। | ||
सारणियों के कई आयाम हो सकते हैं, इस प्रकार एक से अधिक सूचकांकों का उपयोग करके किसी ऐरे तक पहुंचना असामान्य नहीं है। उदाहरण के लिए, तीन पंक्तियों और चार स्तंभों वाला एक द्वि-आयामी ऐरे <code>A</code> शून्य-आधारित अनुक्रमण प्रणाली के मामले में अभिव्यक्ति <code>A[1][3]</code> द्वारा दूसरी पंक्ति और चौथे स्तंभ पर तत्व तक पहुंच प्रदान कर सकता है। इस प्रकार दो सूचकांकों का उपयोग द्वि-आयामी ऐरे के लिए किया जाता है, तीन तीन-आयामी ऐरे के लिए, और ''n'' - ''n'' -आयामी ऐरे के लिए किया जाता है। | |||
किसी तत्व को निर्दिष्ट करने के लिए आवश्यक सूचकांकों की संख्या को | किसी तत्व को निर्दिष्ट करने के लिए आवश्यक सूचकांकों की संख्या को ऐरे का आयाम, आयाम या रैंक कहा जाता है। | ||
मानक सरणियों में, प्रत्येक | मानक सरणियों में, प्रत्येक सूचकांक लगातार पूर्णांकों (या कुछ [[प्रगणित प्रकार]] के लगातार मूल्यों) की एक निश्चित सीमा तक सीमित होता है, और एक तत्व का एड्रेस सूचकांकों पर "रैखिक" सूत्र द्वारा गणना किया जाता है। | ||
=== | === आयामी सरणियाँ === | ||
आयामी ऐरे (या एकल आयाम ऐरे) रैखिक ऐरे का एक प्रकार है। इसके तत्वों तक पहुँचने में एक एकल सबस्क्रिप्ट सम्मिलित है जो या तो एक पंक्ति या स्तंभ अनुक्रमणिका का प्रतिनिधित्व कर सकता है। | |||
उदाहरण के रूप में C डिक्लेरेशन <code>int anArrayName[10];</code> जो दस पूर्णांकों की एक आयामी ऐरे घोषित करता है। यहां, ऐरे <code>int</code> प्रकार के दस तत्वों को संग्रहीत कर सकती है। इस ऐरे में शून्य से लेकर नौ तक के सूचकांक हैं। उदाहरण के लिए, अभिव्यक्ति <code>anArrayName[0]</code> और <code>anArrayName[9]</code> क्रमशः पहले और अंतिम तत्व हैं। | |||
रैखिक एड्रेसिंग वाले वेक्टर के लिए, इंडेक्स i वाला तत्व | रैखिक एड्रेसिंग वाले वेक्टर के लिए, इंडेक्स ''i'' वाला तत्व {{Nowrap|''B'' + ''c'' × ''i''}} एड्रेस पर स्थित है, जहां ''B'' एक निश्चित ''आधार एड्रेस'' है और ''c'' एक निश्चित स्थिरांक है, जिसे कभी-कभी ''एड्रेस इंक्रीमेंट'' या ''स्ट्राइड'' कहा जाता है। | ||
यदि मान्य तत्व सूचकांक 0 से | यदि मान्य तत्व सूचकांक 0 से आरंभ होते हैं, तो स्थिरांक ''B'' केवल ऐरे के पहले तत्व का एड्रेस है। इस कारण से, [[:hi:सी (प्रोग्रामिंग भाषा)|सी प्रोग्रामिंग भाषा]] निर्दिष्ट करती है कि ऐरे सूचकांक सदैव 0 से आरंभ होते हैं; और कई प्रोग्रामर उस तत्व को "फर्स्ट" के बजाय " [[:hi:शून्य आधारित नंबरिंग|ज़ीरोथ]] " कहेंगे। | ||
हालांकि, | हालांकि, आधार एड्रेस ''B'' के उचित विकल्प से कोई भी पहले तत्व की अनुक्रमणिका चुन सकता है। उदाहरण के लिए, यदि ऐरे में पाँच तत्व हैं, जिन्हें 1 से 5 तक अनुक्रमित किया गया है, और आधार एड्रेस ''B'' को {{Nowrap|''B'' + 30''c''}} से बदल दिया गया है, तो उन्हीं तत्वों के सूचकांक 31 से 35 होंगे। यदि क्रमांकन 0 से आरंभ नहीं होता है, तो अचर ''B'' किसी भी तत्व का एड्रेस नहीं हो सकता है। | ||
===बहुआयामी सरणियाँ=== | ===बहुआयामी सरणियाँ=== | ||
बहुआयामी ऐरे के लिए, सूचकांक ''i'', ''j'' वाले तत्व का एड्रेस ''B'' + ''c'' · ''i'' + ''d'' · ''j'' होगा, जहां गुणांक ''c'' और ''d'' क्रमशः ''पंक्ति'' और ''स्तंभ एड्रेस वृद्धि'' हैं। | |||
अधिक | अधिक आम तौर पर, ''k'' -आयामी ऐरे में, सूचकांक ''i'' <sub>1</sub>, ''i'' <sub>2</sub>, ..., ''i'' <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 तत्वों को स्टोर कर सकते हैं जिन्हें वे रैखिक रूप से संग्रहीत करेंगे लेकिन पहली पंक्ति रैखिक से आरंभहोकर दूसरी पंक्ति के साथ जारी रहेंगे। उपरोक्त ऐरे को <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 की निश्चित शक्ति है, तो गुणन को [[ बिटवाइज़ ऑपरेशन |बिटवाइज़ ऑपरेशन]] द्वारा प्रतिस्थापित किया जा सकता है। | ||
गुणांक | गुणांक ''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, पास्कल और अल्गोल) उपयोगकर्ता को प्रत्येक सूचकांक के लिए न्यूनतम मान चुनने देती हैं। | ||
=== डोप वैक्टर === | === डोप वैक्टर === | ||
एड्रेसिंग फॉर्मूला पूरी तरह से आयाम डी, आधार | एड्रेसिंग फॉर्मूला पूरी तरह से आयाम डी, आधार एड्रेस 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|रो- और कॉलम- मेजर ऑर्डर}} | |||
प्रायःगुणांक चुने जाते हैं ताकि तत्व मेमोरी के एक सन्निहित क्षेत्र पर अधिकार कर लें। हालांकि, ऐसा जरूरी नहीं है। यहां तक कि अगर सरणियाँ सदैव सन्निहित तत्वों के साथ बनाई जाती हैं, तो कुछ ऐरे स्लाइसिंग ऑपरेशन उनसे गैर-सन्निहित उप-ऐरे बना सकते हैं। | |||
[[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| | {{Main|डायनामिक सरणी}} | ||
कुछ | स्थैतिक सरणियों का एक आकार होता है जो उनके बनाए जाने पर तय होता है और फलस्वरूप तत्वों को सम्मिलित या निकालने की अनुमति नहीं देता है। हालाँकि, एक नई ऐरे आवंटित करके और पुराने ऐरे की सामग्री को इसमें कॉपी करके, किसी ऐरे के ''गतिशील'' संस्करण को प्रभावी ढंग से लागू करना संभव है; [[गतिशील सरणी|गतिशील ऐरे]] देखें। यदि यह ऑपरेशन बार-बार किया जाता है, तो ऐरे के अंत में सम्मिलन के लिए केवल परिशोधित निरंतर समय की आवश्यकता होती है। | ||
कुछ ऐरे डेटा संरचनाएं भंडारण को पुन: आवंटित नहीं करती हैं, लेकिन उपयोग में ऐरे के तत्वों की संख्या की गणना करती हैं, जिन्हें गिनती या आकार कहा जाता है। यह प्रभावी रूप से ऐरे को एक निश्चित अधिकतम आकार या क्षमता के साथ एक गतिशील ऐरे बनाता है; पास्कल तार इसके उदाहरण हैं। | |||
=== गैर-रैखिक सूत्र === | === गैर-रैखिक सूत्र === | ||
अधिक जटिल (गैर-रैखिक) सूत्र कभी-कभी उपयोग किए जाते हैं। उदाहरण के लिए, एक कॉम्पैक्ट द्वि-आयामी [[ त्रिकोणीय सरणी ]] के लिए, एड्रेसिंग फॉर्मूला डिग्री 2 का बहुपद है। | अधिक जटिल (गैर-रैखिक) सूत्र कभी-कभी उपयोग किए जाते हैं। उदाहरण के लिए, एक कॉम्पैक्ट द्वि-आयामी [[ त्रिकोणीय सरणी |त्रिकोणीय ऐरे]] के लिए, एड्रेसिंग फॉर्मूला डिग्री 2 का बहुपद है। | ||
==दक्षता== | ==दक्षता== | ||
''स्टोर'' और ''चयन'' दोनों (नियतात्मक सबसे खराब स्थिति) निरंतर समय लेते हैं। सरणियाँ ''n'' तत्वों की संख्या में रैखिक ([[:hi:बड़ा ओ संकेतन|O]] ( ''n'' )) स्थान लेती हैं जिन्हें वे धारण करते हैं। | |||
तत्व आकार k के साथ एक | तत्व आकार ''k'' के साथ एक ऐरे में और B बाइट्स के कैश लाइन आकार वाली मशीन पर, ''n'' तत्वों की एक ऐरे के माध्यम से पुनरावृति के लिए न्यूनतम सीलिंग ( ''nk'' /B) कैश मिस की आवश्यकता होती है, क्योंकि इसके तत्व सन्निहित मेमोरी स्थानों पर कब्जा कर लेते हैं। यादृच्छिक मेमोरी स्थानों पर ''एन'' तत्वों तक पहुंचने के लिए आवश्यक कैश मिस की संख्या की तुलना में यह लगभग ''बी'' /के का एक कारक है। परिणामस्वरूप, एक ऐरे पर अनुक्रमिक पुनरावृत्ति कई अन्य डेटा संरचनाओं पर पुनरावृत्ति की तुलना में अभ्यास में काफी तेज है, एक संपत्ति जिसे संदर्भ की स्थानीयता कहा जाता है (इसका मतलब यह ''नहीं'' है कि एक ही (स्थानीय) ऐरे के भीतर एक [[:hi:बिल्कुल सही हैश समारोह|पूर्ण हैश]] या [[:hi:हैश फंकशन|तुच्छ हैश]] का उपयोग करना, और भी तेज़ नहीं होगा - और निरंतर समय में प्राप्त करने योग्य)। पुस्तकालय मेमोरी की श्रेणियों (जैसे [[:hi:स्ट्रिंग.एच|memcpy]] ) की प्रतिलिपि बनाने के लिए निम्न-स्तरीय अनुकूलित सुविधाएं प्रदान करते हैं, जिनका उपयोग ऐरे तत्वों के [[:hi:सन्निहित डेटा भंडारण|सन्निहित]] ब्लॉकों को व्यक्तिगत तत्व पहुंच के माध्यम से प्राप्त करने की तुलना में काफी तेजी से किया जा सकता है। इस तरह के अनुकूलित रूटीन का स्पीडअप ऐरे तत्व आकार, आर्किटेक्चर और कार्यान्वयन से भिन्न होता है। | ||
मेमोरी-वार, सरणियाँ कॉम्पैक्ट डेटा संरचनाएं हैं जिनमें कोई प्रति-तत्व [[ कम्प्यूटेशनल ओवरहेड ]] नहीं है। प्रति- | मेमोरी-वार, सरणियाँ कॉम्पैक्ट डेटा संरचनाएं हैं जिनमें कोई प्रति-तत्व [[ कम्प्यूटेशनल ओवरहेड |कम्प्यूटेशनल ओवरहेड]] नहीं है। प्रति-ऐरे ओवरहेड हो सकता है (उदाहरण के लिए, अनुक्रमणिका सीमाओं को संग्रहीत करने के लिए) लेकिन यह भाषा-निर्भर है। यह भी हो सकता है कि एक ऐरे में संग्रहीत तत्वों को अलग-अलग चर में संग्रहीत समान तत्वों की तुलना में कम मेमोरी की आवश्यकता होती है, क्योंकि कई ऐरे तत्वों को एक ही शब्द (डेटा प्रकार) में संग्रहीत किया जा सकता है; ऐसे सरणियों को प्रायःपैक्ड सरणियाँ कहा जाता है। एक चरम (लेकिन सामान्यतः इस्तेमाल किया जाने वाला) मामला [[ बिट सरणी | बिट ऐरे]] है, जहां प्रत्येक बिट एक तत्व का प्रतिनिधित्व करता है। इस प्रकार एक एकल [[ ऑक्टेट (कंप्यूटिंग) |ऑक्टेट (कंप्यूटिंग)]] सबसे कॉम्पैक्ट रूप में, अधिकतम 8 विभिन्न स्थितियों के 256 विभिन्न संयोजनों को धारण कर सकता है। | ||
स्टैटिकली प्रेडिक्टेबल एक्सेस पैटर्न के साथ ऐरे एक्सेस [[ डेटा समानता ]] का एक प्रमुख स्रोत है। | स्टैटिकली प्रेडिक्टेबल एक्सेस पैटर्न के साथ ऐरे एक्सेस [[ डेटा समानता |डेटा समानता]] का एक प्रमुख स्रोत है। | ||
=== अन्य डेटा संरचनाओं के साथ तुलना === | === अन्य डेटा संरचनाओं के साथ तुलना === | ||
[[:hi:गतिशील सरणी|डायनेमिक सरणियाँ]] या बढ़ने योग्य सरणियाँ सरणियों के समान होती हैं लेकिन तत्वों को सम्मिलित करने और हटाने की क्षमता जोड़ती हैं; अंत में जोड़ना और हटाना विशेष रूप से कुशल है। हालांकि, वे रैखिक ([[:hi:बड़ा ओ संकेतन|Θ]] (''n'')) अतिरिक्त संग्रहण आरक्षित करते हैं, जबकि सरणियाँ अतिरिक्त संग्रहण आरक्षित नहीं करती हैं। | |||
गतिशील सरणियाँ या बढ़ने योग्य सरणियाँ सरणियों के समान होती हैं लेकिन तत्वों को सम्मिलित करने और हटाने की क्षमता जोड़ती हैं; अंत में जोड़ना और हटाना विशेष रूप से कुशल है। हालांकि, वे | |||
साहचर्य सरणियाँ | [[साहचर्य सरणियाँ]] विशाल भंडारण ओवरहेड्स के बिना ऐरे जैसी कार्यक्षमता के लिए एक तंत्र प्रदान करती हैं जब सूचकांक मान विरल होते हैं। उदाहरण के लिए, एक ऐरे जिसमें केवल इंडेक्स 1 और 2 बिलियन के मान होते हैं, ऐसी संरचना का उपयोग करने से लाभान्वित हो सकते हैं। पूर्णांक कुंजियों के साथ विशिष्ट साहचर्य सरणियों में [[:hi:मूलांक का पेड़|पेट्रीसिया ट्राई]], [[:hi:जूडी सरणी|जूडी सरणियाँ]] और [[:hi:वैन एमडे बोस ट्री|वैन एम्डे बोस ट्री]] सम्मिलित हैं। | ||
संतुलित ट्री को अनुक्रमित पहुंच के लिए 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|एक द्वि-आयामी | [[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> एक त्रि-आयामी ऐरे डेटा का एक ब्लॉक, आदि। | ||
यह किसी दिए गए डोमेन के साथ सभी मैट्रिक्स के सेट के आयाम के साथ भ्रमित नहीं होना चाहिए, अर्थात | यह किसी दिए गए डोमेन के साथ सभी मैट्रिक्स के सेट के आयाम के साथ भ्रमित नहीं होना चाहिए, अर्थात ऐरे में तत्वों की संख्या। उदाहरण के लिए, 5 पंक्तियों और 4 स्तंभों वाला एक ऐरे द्वि-आयामी है, लेकिन ऐसे मैट्रिक्स 20-आयामी स्थान बनाते हैं। इसी तरह, एक त्रि-आयामी वेक्टर को आकार तीन के एक-आयामी ऐरे द्वारा दर्शाया जा सकता है। | ||
==यह भी देखें== | ==यह भी देखें== | ||
| Line 178: | Line 175: | ||
{{Authority control}} | {{Authority control}} | ||
{{DEFAULTSORT:Array Data Structure}} | {{DEFAULTSORT:Array Data Structure}} | ||
[[Category: | [[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
कंप्यूटर विज्ञान में, सरणी (ऐरे) एक डेटा संरचना है जिसमें अवयव (वैल्यूज या वेरिएबल्स) का संग्रह होता है, प्रत्येक को कम से कम एक ऐरे अनुक्रमणिका या कुंजी द्वारा पहचाना जाता है। एक ऐरे को इस तरह संग्रहीत किया जाता है कि प्रत्येक तत्व की स्थिति की गणना उसके सूचकांक टपल से गणितीय सूत्र द्वारा की जा सकती है।[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-आयामी स्थान बनाते हैं। इसी तरह, एक त्रि-आयामी वेक्टर को आकार तीन के एक-आयामी ऐरे द्वारा दर्शाया जा सकता है।
यह भी देखें
- गतिशील सरणी
- समानांतर सरणी
- चर-लंबाई सरणी
- बिट सरणी
- ऐरे स्लाइसिंग
- ऑफसेट (कंप्यूटर विज्ञान)
- पंक्ति- और स्तंभ-प्रमुख क्रम
- एक सरणी का स्ट्राइड
संदर्भ
- ↑ Black, Paul E. (13 November 2008). "array". Dictionary of Algorithms and Data Structures. National Institute of Standards and Technology. Retrieved 22 August 2010.
- ↑ Bjoern Andres; Ullrich Koethe. "Runtime-Flexible Multi-dimensional Arrays and Views for C++98 and C++0x". arXiv:1008.2909 [cs.DS].
- ↑ 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.
- ↑ David R. Richardson (2002), The Book on Data Structures. iUniverse, 112 pages. ISBN 0-595-24039-9, ISBN 978-0-595-24039-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.
- ↑
{{cite conference}}: Empty citation (help) - ↑ Bjoern Andres; Ullrich Koethe. "Runtime-Flexible Multi-dimensional Arrays and Views for C++98 and C++0x". arXiv:1008.2909 [cs.DS].
- ↑ Donald Knuth, The Art of Computer Programming, vol. 3. Addison-Wesley
- ↑ Levy, Henry M. (1984), Capability-based Computer Systems, Digital Press, p. 22, ISBN 9780932376220.
- ↑ 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.
- ↑
{{cite conference}}: Empty citation (help) - ↑ Bjoern Andres; Ullrich Koethe. "Runtime-Flexible Multi-dimensional Arrays and Views for C++98 and C++0x". arXiv:1008.2909 [cs.DS].
- ↑ "सरणी कोड उदाहरण - PHP सरणी कार्य - PHP कोड". Computer Programming Web programming Tips. Archived from the original on 13 April 2011. Retrieved 8 April 2011.
अधिकांश कंप्यूटर भाषाओं में सरणी अनुक्रमणिका (गिनती) 0 से शुरू होती है, 1 से नहीं। सरणी के पहले तत्व का सूचकांक 0 है, सरणी के दूसरे तत्व का सूचकांक 1 है, और इसी तरह। नीचे दिए गए नामों की सरणी में आप अनुक्रमणिका और मान देख सकते हैं।
- ↑ 14.0 14.1 Bjoern Andres; Ullrich Koethe; Thorben Kroeger; Hamprecht (2010). "C++98 और C++0x . के लिए रनटाइम-लचीले बहु-आयामी सरणी और दृश्य". arXiv:1008.2909 [cs.DS].
- ↑ Garcia, Ronald; Lumsdaine, Andrew (2005). "मल्टीएरे: सरणियों के साथ सामान्य प्रोग्रामिंग के लिए एक सी ++ पुस्तकालय". Software: Practice and Experience. 35 (2): 159–188. doi:10.1002/spe.630. ISSN 0038-0644. S2CID 10890293.
- ↑ "Counted B-Trees".
- ↑ "द्वि-आयामी सरणियाँ \ Processing.org". processing.org. Retrieved 2020-05-01.
बाहरी संबंध
Data Structures/Arrays at Wikibooks