ऐरे (डेटा स्ट्रक्चर)

From Vigyanwiki

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

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

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

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

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

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

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

इतिहास

पहले डिजिटल कंप्यूटरों ने डेटा टेबल, वेक्टर और मैट्रिक्स कंप्यूटेशंस, और कई अन्य उद्देश्यों के लिए सरणी संरचनाओं को स्थापित करने और एक्सेस करने के लिए मशीन-भाषा प्रोग्रामिंग का उपयोग किया। जॉन वॉन न्यूमैन ने ईडीवीएसी के निर्माण के दौरान 1945 में पहला एरे-सॉर्टिंग प्रोग्राम (मर्ज़ सॉर्ट ) लिखा था। पहला संग्रहीत-प्रोग्राम कंप्यूटर।[6]पी। 159 सरणी अनुक्रमण मूल रूप से स्व-संशोधित कोड द्वारा किया गया था, और बाद में अनुक्रमणिका रजिस्टरों और एड्रेसिंग मोड का उपयोग करके किया गया था। 1960 के दशक में डिज़ाइन किए गए कुछ मेनफ्रेम, जैसे कि बरोज़ बड़े सिस्टम और इसके उत्तराधिकारी, हार्डवेयर में इंडेक्स-बाउंड चेकिंग करने के लिए स्मृति विभाजन का उपयोग करते थे।[7] असेंबली भाषाओं में आमतौर पर मशीन द्वारा प्रदान की जाने वाली चीज़ों के अलावा, सरणियों के लिए कोई विशेष समर्थन नहीं होता है। फोरट्रान (1957), लिस्प (प्रोग्रामिंग भाषा) (1958), COBOL (1960), और ALGOL (1960) सहित शुरुआती उच्च-स्तरीय प्रोग्रामिंग भाषाओं में बहु-आयामी सरणियों के लिए समर्थन था, और इसलिए C (प्रोग्रामिंग भाषा) है। (1972)। C++ (1983) में, बहु-आयामी सरणियों के लिए क्लास टेम्प्लेट मौजूद हैं, जिनका आयाम रनटाइम पर तय होता है[3][5]साथ ही रनटाइम-लचीले सरणियों के लिए।[2]


आवेदन

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

यदि मान्य तत्व सूचकांक 0 से शुरू होते हैं, तो स्थिर B केवल सरणी के पहले तत्व का पता होता है। इस कारण से, सी (प्रोग्रामिंग भाषा) निर्दिष्ट करता है कि सरणी सूचकांक हमेशा 0 से शुरू होते हैं; और कई प्रोग्रामर उस तत्व को पहले के बजाय शून्य-आधारित नंबरिंग कहेंगे।

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

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

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

अधिक सामान्यतः, k-आयामी सरणी में, सूचकांक वाले तत्व का पता i1, मैं2, ..., मैंk है

बी + सी1 · मैं1 + सी2 · मैं2 + … + सीk · मैंk.

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

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

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

गुणांक सीk चुना जाना चाहिए ताकि प्रत्येक वैध सूचकांक एक विशिष्ट तत्व के पते पर मैप कर सके।

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

डोप वैक्टर

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


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

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

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

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

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

1 2 3 4 5 6 7 8 9

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

1 4 7 2 5 8 3 6 9

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

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

आकार बदलना

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

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

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

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

दक्षता

दोनों स्टोर और चयन करें (निर्धारक सबसे खराब स्थिति) निरंतर समय । Arrays उन तत्वों की संख्या में रैखिक (बिग-ओ नोटेशन (एन)) स्थान लेते हैं जो वे धारण करते हैं।

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

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

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

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

Comparison of list data structures
Peek
(index)
Mutate (insert or delete) at … Excess space,
average
Beginning End Middle
Linked list Θ(n) Θ(1) Θ(1), known end element;
Θ(n), unknown end element
Peek time +
Θ(1)[9][10]
Θ(n)
Array Θ(1) 0
Dynamic array Θ(1) Θ(n) Θ(1) amortized Θ(n) Θ(n)[11]
Balanced tree Θ(log n) Θ(log n) Θ(log n) Θ(log n) Θ(n)
Random-access list Θ(log n)[12] Θ(1) [12] [12] Θ(n)
Hashed array tree Θ(1) Θ(n) Θ(1) amortized Θ(n) Θ(√n)

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

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

सेल्फ-बैलेंसिंग बाइनरी सर्च ट्री को अनुक्रमित पहुंच के लिए ओ (लॉग एन) समय की आवश्यकता होती है, लेकिन ओ (लॉग एन) समय में तत्वों को सम्मिलित करने या हटाने की भी अनुमति देता है,[13] जबकि बढ़ने योग्य सरणियों को एक मनमानी स्थिति में तत्वों को सम्मिलित करने या हटाने के लिए रैखिक (Θ(n)) समय की आवश्यकता होती है।

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

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

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

आयाम

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

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

यह भी देखें


संदर्भ

  1. Black, Paul E. (13 November 2008). "सरणी". Dictionary of Algorithms and Data Structures. National Institute of Standards and Technology. Retrieved 22 August 2010.
  2. 2.0 2.1 2.2 2.3 2.4 Bjoern Andres; Ullrich Koethe; Thorben Kroeger; Hamprecht (2010). "C++98 और C++0x . के लिए रनटाइम-लचीले बहु-आयामी सरणी और दृश्य". arXiv:1008.2909 [cs.DS].
  3. 3.0 3.1 3.2 3.3 Garcia, Ronald; Lumsdaine, Andrew (2005). "मल्टीएरे: सरणियों के साथ सामान्य प्रोग्रामिंग के लिए एक सी ++ पुस्तकालय". Software: Practice and Experience. 35 (2): 159–188. doi:10.1002/spe.630. ISSN 0038-0644. S2CID 10890293.
  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. 5.0 5.1 Veldhuizen, Todd L. (December 1998). ब्लिट्ज ++ में सरणी (PDF). Computing in Object-Oriented Parallel Environments. Lecture Notes in Computer Science. Vol. 1505. Springer Berlin Heidelberg. pp. 223–230. doi:10.1007/3-540-49372-7_24. ISBN 978-3-540-65387-5. Archived from the original (PDF) on 9 November 2016.
  6. Donald Knuth, The Art of Computer Programming, vol. 3. Addison-Wesley
  7. Levy, Henry M. (1984), Capability-based Computer Systems, Digital Press, p. 22, ISBN 9780932376220.
  8. "सरणी कोड उदाहरण - PHP सरणी कार्य - PHP कोड". Computer Programming Web programming Tips. Archived from the original on 13 April 2011. Retrieved 8 April 2011. अधिकांश कंप्यूटर भाषाओं में सरणी अनुक्रमणिका (गिनती) 0 से शुरू होती है, 1 से नहीं। सरणी के पहले तत्व का सूचकांक 0 है, सरणी के दूसरे तत्व का सूचकांक 1 है, और इसी तरह। नीचे दिए गए नामों की सरणी में आप अनुक्रमणिका और मान देख सकते हैं।
  9. Day 1 Keynote - Bjarne Stroustrup: C++11 Style at GoingNative 2012 on channel9.msdn.com from minute 45 or foil 44
  10. Number crunching: Why you should never, ever, EVER use linked-list in your code again at kjellkod.wordpress.com
  11. Brodnik, Andrej; Carlsson, Svante; Sedgewick, Robert; Munro, JI; Demaine, ED (1999), Resizable Arrays in Optimal Time and Space (Technical Report CS-99-09) (PDF), Department of Computer Science, University of Waterloo
  12. 12.0 12.1 12.2 Chris Okasaki (1995). "Purely Functional Random-Access Lists". Proceedings of the Seventh International Conference on Functional Programming Languages and Computer Architecture: 86–95. doi:10.1145/224164.224187.
  13. "गिने गए बी-पेड़".
  14. "द्वि-आयामी सरणियाँ \ Processing.org". processing.org. Retrieved 1 May 2020.


बाहरी संबंध