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

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

गणित में
सबस्क्रिप्ट का उपयोग करके किसी सरणी के तत्वों को संदर्भित करना गणित में अक्सर सहायक होता है। सबस्क्रिप्ट पूर्णांक या चर (गणित) हो सकते हैं। सारणी सामान्यतः टेंसर का रूप लेती है, क्योंकि इन्हें बहु-आयामी सारणी के रूप में माना जा सकता है। विशेष (और अधिक परिचित) मामले वेक्टर (ज्यामिति) (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.

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

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

अन्य भाषाओं में
पास्कल जैसी अन्य प्रोग्रामिंग भाषाओं में, सूचकांक 1 से शुरू हो सकते हैं, इसलिए मेमोरी के ब्लॉक में अनुक्रमण को  सरल रैखिक परिवर्तन द्वारा स्टार्ट-एट-1 एड्रेसिंग योजना में फिट करने के लिए बदला जा सकता है - इस योजना में, ith का मेमोरी स्थान आधार पता b और तत्व आकार s वाला तत्व है 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