सूचकांक संकेतन

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

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

निम्नलिखित केवल अवधारणा का परिचय है: सूचकांक संकेतन का उपयोग गणित में अधिक विस्तार से किया जाता है (विशेषकर टेंसर#ऑपरेशंस के प्रतिनिधित्व और हेरफेर में)। अधिक जानकारी के लिए मुख्य लेख देखें.

-आयामी सरणियाँ (सदिश)
सदिश को पंक्ति सदिश या स्तंभ सदिश के रूप में लिखकर संख्याओं की सरणी के रूप में माना जाता है (जो भी उपयोग किया जाता है वह सुविधा या संदर्भ पर निर्भर करता है):


 * $$\mathbf{a} = \begin{pmatrix}

a_1 \\ a_2 \\ \vdots \\ a_n \end{pmatrix}, \quad \mathbf{a} = \begin{pmatrix} a_1 & a_2 & \cdots & a_n \end{pmatrix}$$ सूचकांक संकेतन केवल ए लिखकर सरणी के तत्वों को इंगित करने की अनुमति देता हैi, जहां n-आयामों के कारण सूचकांक i को 1 से n तक चलने के लिए जाना जाता है। उदाहरण के लिए, सदिश दिया गया:


 * $$\mathbf{a} = \begin{pmatrix}

10 & 8 & 9 & 6 & 3 & 5 \\ \end{pmatrix}$$ फिर कुछ प्रविष्टियाँ हैं


 * $$a_1 = 10,\, a_2 = 8,\, \cdots,\, a_6 = 5 $$.

अंकन को गणित और भौतिकी में वैक्टर पर लागू किया जा सकता है। निम्नलिखित सदिश समीकरण


 * $$\mathbf{a} + \mathbf{b} = \mathbf{c}$$

सदिश के तत्वों (उर्फ घटकों) के संदर्भ में भी लिखा जा सकता है, अर्थात


 * $$ a_i + b_i = c_i $$

जहां सूचकांक मूल्यों की निश्चित श्रृंखला लेते हैं। यह अभिव्यक्ति समीकरणों के  सेट का प्रतिनिधित्व करती है, प्रत्येक सूचकांक के लिए । यदि प्रत्येक सदिश में n तत्व हैं, जिसका अर्थ है i = 1,2,…n, तो समीकरण स्पष्ट रूप से हैं


 * $$\begin{align}

a_1 + b_1 &= c_1 \\ a_2 + b_2 &= c_2 \\ &\ \ \vdots \\ a_n + b_n &= c_n \end{align}$$ इसलिए, सूचकांक अंकन कुशल आशुलिपि के रूप में कार्य करता है
 * 1) समीकरण की सामान्य संरचना का प्रतिनिधित्व करना,
 * 2) जबकि व्यक्तिगत घटकों पर लागू होता है।

द्वि-आयामी सरणियाँ


दो या दो से अधिक आयामों में संख्याओं के सरणियों का वर्णन करने के लिए से अधिक सूचकांक का उपयोग किया जाता है, जैसे कि आव्यूह के तत्व, (दाईं ओर की छवि भी देखें);


 * $$\mathbf{A} = \begin{pmatrix}

a_{11} & a_{12} & \cdots & a_{1n} \\ a_{21} & a_{22} & \cdots & a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m1} & a_{m2} & \cdots & a_{mn} \\ \end{pmatrix}$$ आव्यूह A की प्रविष्टि दो सूचकांकों, मान लीजिए i और j का उपयोग करके लिखी जाती है, सूचकांकों को अलग करने के लिए अल्पविराम के साथ या उसके बिना: ''aijया एi,j, जहां पहली सबस्क्रिप्ट पंक्ति संख्या है और दूसरी कॉलम संख्या है। गुणन का उपयोग गुणन के लिए संकेतन के रूप में भी किया जाता है; यह भ्रम का स्रोत हो सकता है. उदाहरण के लिए, यदि''


 * $$\mathbf{A} = \begin{pmatrix}

9 & 8 & 6 \\ 1 & 2 & 7 \\  4 & 9 & 2 \\  6 & 0 & 5 \end{pmatrix}$$ फिर कुछ प्रविष्टियाँ हैं


 * $$a_{11} = 9,\, a_{12} = 8,\, a_{21} = 1,\, \cdots,\, a_{23} = 7,\, \cdots $$.

9 से बड़े सूचकांकों के लिए, अल्पविराम-आधारित अंकन बेहतर हो सकता है (उदाहरण के लिए, a3,12 के अतिरिक्त 312).

आव्यूह समीकरण सदिश समीकरणों के समान ही लिखे जाते हैं, जैसे


 * $$ \mathbf{A} + \mathbf{B} = \mathbf{C} $$

आव्यूह के तत्वों (उर्फ घटकों) के संदर्भ में


 * $$ A_{ij} + B_{ij} = C_{ij} $$

i और j के सभी मानों के लिए। पुनः यह अभिव्यक्ति समीकरणों के सेट का प्रतिनिधित्व करती है, प्रत्येक सूचकांक के लिए । यदि आव्यूह में प्रत्येक में m पंक्तियाँ और n कॉलम हैं, तो इसका अर्थ है  और, तो mn समीकरण हैं।

बहुआयामी सरणियाँ
संकेतन तत्वों के बहु-आयामी सरणियों के स्पष्ट सामान्यीकरण की अनुमति देता है: टेंसर। उदाहरण के लिए,


 * $$ A_{i_1 i_2 \cdots } + B_{i_1 i_2 \cdots} = C_{i_1 i_2 \cdots} $$

कई समीकरणों के समुच्चय का प्रतिनिधित्व करना।

टेंसर विश्लेषण में, सहसंयोजक को विपरीत इकाइयों से भिन्न करने, सदिशों के सहप्रसरण और प्रतिप्रसरण को देखने और सूचकांकों को बढ़ाने और घटाने के लिए सबस्क्रिप्ट के अतिरिक्त सुपरस्क्रिप्ट का उपयोग किया जाता है।

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

उदाहरण के लिए, यदि पूर्णांकों की सरणी को कंप्यूटर की मेमोरी के क्षेत्र में मेमोरी सेल से प्रारंभ होती है जिसका एड्रेस 3000 (आधार एड्रेस) है, और प्रत्येक पूर्णांक चार कोशिकाओं (बाइट्स) पर अधिकार कर लेता है, तो इस सरणी के तत्व मेमोरी समिष्ट 0x3000, 0x3004, 0x3008,…, 0x3000 + 4(n − 1) पर हैं (शून्य-आधारित क्रमांकन पर ध्यान दें)। सामान्यतः, आधार एड्रेस b और तत्व आकार s के साथ किसी सरणी के ith तत्व का एड्रेस b + is होता है।

कार्यान्वयन विवरण
सी प्रोग्रामिंग लैंग्वेज में हम उपरोक्त को *(base + i) (पॉइंटर फॉर्म) या base[i] (एरे इंडेक्सिंग फॉर्म) के रूप में लिख सकते हैं, जो बिल्कुल समतुल्य है क्योंकि सी मानक एरे इंडेक्सिंग फॉर्म को पॉइंटर फॉर्म में परिवर्तन के रूप में परिभाषित करता है। संयोगवश, चूंकि सूचक जोड़ क्रमविनिमेय है, यह 3[base] जैसे अस्पष्ट अभिव्यक्तियों की अनुमति देता है जो base[3] के समान है।

बहुआयामी सरणियाँ
चीजें तब और अधिक रोचक हो जाती हैं जब हम एक से अधिक सूचकांक वाले सरणियों पर विचार करते हैं, उदाहरण के लिए, द्वि-आयामी तालिका। हमारे पास तीन संभावनाएँ हैं: सी में, सभी तीन विधियों का उपयोग किया जा सकता है। जब प्रथम विधि का उपयोग किया जाता है, तो प्रोग्रामर यह निश्चित करता है कि सरणी के तत्वों को कंप्यूटर की मेमोरी में कैसे रखा जाता है, और प्रत्येक तत्व के स्थान की गणना करने के लिए सूत्र प्रदान करता है। दूसरी विधि का उपयोग तब किया जाता है जब प्रत्येक पंक्ति में तत्वों की संख्या समान होती है और प्रोग्राम लिखे जाने के समय ज्ञात होती है। प्रोग्रामर, उदाहरण के लिए, elementtype tablename[][3]; लिखकर तीन कॉलम वाले ऐरे की घोषणा करता है। इसके पश्चात tablename[first index][second index] लिखकर सरणी के विशेष तत्व को संदर्भित करता है। कंपाइलर प्रत्येक पंक्ति में व्याप्त मेमोरी सेल्स की कुल संख्या की गणना करता है, वांछित पंक्ति के एड्रेस शोध के लिए प्रथम सूचकांक का उपयोग करता है, और फिर पंक्ति में वांछित तत्व के एड्रेस शोध के लिए दूसरे सूचकांक का उपयोग करता है। जब तीसरी विधि का उपयोग किया जाता है, तो प्रोग्रामर तालिका को पॉइंटर्स की सरणी घोषित करता है, जैसे कि elementtype *tablename[]; है। जब प्रोग्रामर पश्चात में किसी विशेष तत्व tablename[first index][second index] निर्दिष्ट करता है, कंपाइलर प्रथम सूचकांक द्वारा निर्दिष्ट पंक्ति के एड्रेस को देखने के लिए निर्देश उत्पन्न करता है, और दूसरे सूचकांक द्वारा निर्दिष्ट तत्व के एड्रेस की गणना करते समय इस एड्रेस को आधार के रूप में उपयोग करता है।
 * दोनों में से सूचकांक की गणना करके द्वि-आयामी सरणी को एक-आयामी बनाएं।
 * एक-आयामी सरणी पर विचार करें जहां प्रत्येक तत्व एक-आयामी सरणी है, अर्थात सरणियों की सरणी है।
 * मूल सरणी की प्रत्येक पंक्ति के एड्रेस की सरणी को रखने के लिए अतिरिक्त स्टोरेज का उपयोग करें, और मूल सरणी की पंक्तियों को भिन्न-भिन्न एक-आयामी सरणी के रूप में संग्रहीत करें।

अन्य लैंग्वेजेज में
पास्कल जैसी अन्य प्रोग्रामिंग लैंग्वेजेज में, सूचकांक 1 से प्रारंभ हो सकते हैं, इसलिए मेमोरी के ब्लॉक में अनुक्रमण को सरल रैखिक परिवर्तन द्वारा स्टार्ट-एट-1 एड्रेसिंग योजना में फिट करने के लिए परिवर्तित किया जा सकता है - इस योजना में, आधार एड्रेस b और तत्व आकार s के साथ ith तत्व का मेमोरी समिष्ट b + (i − 1)s है।

संदर्भ

 * Programming with C++, J. Hubbard, Schaum's Outlines, McGraw Hill (USA), 1996, ISBN 0-07-114328-9
 * Tensor Calculus, D.C. Kay, Schaum's Outlines, McGraw Hill (USA), 1988, ISBN 0-07-033484-6
 * Mathematical methods for physics and engineering, K.F. Riley, M.P. Hobson, S.J. Bence, Cambridge University Press, 2010, ISBN 978-0-521-86153-3