सहयोगी सरणी

From alpha
Jump to navigation Jump to search

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

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

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

एसोसिएटिव एरेज़ में कई अनुप्रयोग होते हैं जिनमें संस्मरण जैसे मौलिक सॉफ़्टवेयर डिज़ाइन पैटर्न शामिल हैं और डेकोरेटर पैटर्न.[7] यह नाम गणित में ज्ञात साहचर्य गुण से नहीं आया है। बल्कि, यह इस तथ्य से उत्पन्न होता है कि मूल्य कुंजियों से जुड़े होते हैं। इसे फ्लिन के टैक्सोनॉमी#संबंधी संपत्ति के साथ भ्रमित नहीं होना चाहिए।

संचालन

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

आमतौर पर एसोसिएटिव ऐरे के लिए जो ऑपरेशन परिभाषित किए जाते हैं वे हैं:[3][4][8]

  • डालें या डालें: एक नया जोड़ें संग्रह में जोड़ी, कुंजी को उसके नए मूल्य पर मैप करना। कोई भी मौजूदा मैपिंग अधिलेखित है. इस ऑपरेशन के तर्क कुंजी और मूल्य हैं।
  • हटाएँ या हटाएँ: a हटाएँ संग्रह से जोड़ी, किसी दी गई कुंजी को उसके मूल्य से अनमैप करना। इस ऑपरेशन का तर्क ही कुंजी है।
  • खोजें, खोजें, या प्राप्त करें: वह मान (यदि कोई हो) ढूंढें जो किसी दी गई कुंजी से जुड़ा हो। इस ऑपरेशन का तर्क कुंजी है, और मान ऑपरेशन से लौटाया जाता है। यदि कोई मान नहीं मिलता है, तो कुछ लुकअप फ़ंक्शन एक अपवाद हैंडलिंग बढ़ाते हैं, जबकि अन्य एक डिफ़ॉल्ट मान (शून्य, शून्य, कंस्ट्रक्टर को दिया गया विशिष्ट मान, ...) लौटाते हैं।

इसके अलावा, सहयोगी सरणियों में अन्य ऑपरेशन भी शामिल हो सकते हैं जैसे मैपिंग की संख्या निर्धारित करना या सभी मैपिंग पर लूप करने के लिए एक इटरेटर का निर्माण करना। आमतौर पर, ऐसे ऑपरेशन के लिए, जिस क्रम में मैपिंग लौटाई जाती है वह कार्यान्वयन-परिभाषित हो सकता है।

एक मल्टीमैप एक ही कुंजी के साथ एकाधिक मानों को संबद्ध करने की अनुमति देकर एक सहयोगी सरणी को सामान्यीकृत करता है।[9] एक द्विदिश मानचित्र एक संबंधित अमूर्त डेटा प्रकार है जिसमें मैपिंग दोनों दिशाओं में संचालित होती है: प्रत्येक मान को एक अद्वितीय कुंजी के साथ संबद्ध किया जाना चाहिए, और दूसरा लुकअप ऑपरेशन एक तर्क के रूप में एक मान लेता है और उस मान से जुड़ी कुंजी को देखता है।

गुण

सहयोगी सरणी के संचालन को विभिन्न गुणों को संतुष्ट करना चाहिए:[8]

  • lookup(k, insert(j, v, D)) = if k == j then v else lookup(k, D)
  • lookup(k, new()) = fail, कहाँ fail एक अपवाद या डिफ़ॉल्ट मान है
  • remove(k, insert(j, v, D)) = if k == j then remove(k, D) else insert(j, v, remove(k, D))
  • remove(k, new()) = new()

कहाँ k और j चाबियाँ हैं, v एक मूल्य है, D एक सहयोगी सरणी है, और new() एक नई, खाली सहयोगी सरणी बनाता है।

उदाहरण

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

{
    "Pride and Prejudice": "Alice",
    "Wuthering Heights": "Alice",
    "Great Expectations": "John"
}

प्रमुख ग्रेट एक्सपेक्टेशंस पर एक लुकअप ऑपरेशन जॉन को वापस लाएगा। यदि जॉन अपनी पुस्तक लौटाता है, तो यह हटाने की कार्रवाई का कारण बनेगा, और यदि पैट किसी पुस्तक की जाँच करता है, तो यह सम्मिलन कार्रवाई का कारण बनेगा, जिससे एक अलग स्थिति उत्पन्न होगी:

{
    "Pride and Prejudice": "Alice",
    "The Brothers Karamazov": "Pat",
    "Wuthering Heights": "Alice"
}


कार्यान्वयन

बहुत कम संख्या में मैपिंग वाले शब्दकोशों के लिए, एसोसिएशन सूची, मैपिंग की एक लिंक्ड सूची का उपयोग करके शब्दकोश को लागू करना समझ में आ सकता है। इस कार्यान्वयन के साथ, मैपिंग की कुल संख्या में बुनियादी शब्दकोश संचालन करने का समय रैखिक है; हालाँकि, इसे लागू करना आसान है और इसके चलने के समय में स्थिर कारक छोटे हैं।[3][10] एक और बहुत ही सरल कार्यान्वयन तकनीक, जिसका उपयोग तब किया जा सकता है जब कुंजियाँ एक संकीर्ण सीमा तक सीमित होती हैं, एक सरणी में सीधे संबोधित करना है: किसी दिए गए कुंजी k का मान सरणी सेल A[k] में संग्रहीत किया जाता है, या यदि k के लिए कोई मैपिंग नहीं है तब सेल एक विशेष प्रहरी मान संग्रहीत करता है जो मैपिंग की अनुपस्थिति को इंगित करता है। सरल होने के साथ-साथ, यह तकनीक तेज़ है: प्रत्येक शब्दकोश संचालन में निरंतर समय लगता है। हालाँकि, इस संरचना के लिए स्थान की आवश्यकता संपूर्ण कुंजीस्थान के आकार की है, जिससे यह अव्यावहारिक हो जाता है जब तक कि कुंजीस्थान छोटा न हो।[5]

शब्दकोशों को लागू करने के दो प्रमुख दृष्टिकोण हैश तालिका या खोज वृक्ष हैं।[3][4][5][6]


हैश तालिका कार्यान्वयन

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

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

हैश तालिकाओं को हैश टकराव को संभालने में सक्षम होना चाहिए: जब हैश फ़ंक्शन सरणी की एक ही बाल्टी में दो अलग-अलग कुंजियों को मैप करता है। इस समस्या के दो सबसे व्यापक दृष्टिकोण अलग चेनिंग और खुला संबोधन हैं।[3][4][5][11] अलग-अलग चेनिंग में, सरणी मान को स्वयं संग्रहीत नहीं करती है बल्कि एक पॉइंटर (कंप्यूटर प्रोग्रामिंग) को दूसरे कंटेनर में संग्रहीत करती है, आमतौर पर एक एसोसिएशन सूची, जो हैश से मेल खाने वाले सभी मानों को संग्रहीत करती है। दूसरी ओर, ओपन एड्रेसिंग में, यदि हैश टकराव पाया जाता है, तो तालिका मान को नियतात्मक तरीके से संग्रहीत करने के लिए सरणी में एक खाली स्थान की तलाश करती है, आमतौर पर सरणी में अगली तत्काल स्थिति को देखकर।

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

वृक्ष कार्यान्वयन

स्व-संतुलन बाइनरी खोज पेड़

एक अन्य सामान्य दृष्टिकोण एक स्व-संतुलन द्विआधारी खोज वृक्ष, जैसे एवीएल पेड़ या लाल-काले पेड़ के साथ एक सहयोगी सरणी को लागू करना है।[12] हैश तालिकाओं की तुलना में, इन संरचनाओं में फायदे और कमजोरियां दोनों हैं। सेल्फ-बैलेंसिंग बाइनरी सर्च ट्री का सबसे खराब प्रदर्शन हेश टेबल की तुलना में काफी बेहतर है, जिसमें ओ (लॉग एन) के बड़ा ओ अंकन में समय जटिलता होती है। यह हैश तालिकाओं के विपरीत है, जिसके सबसे खराब प्रदर्शन में सभी तत्वों को एक ही बाल्टी साझा करना शामिल होता है, जिसके परिणामस्वरूप O(n) समय जटिलता होती है। इसके अलावा, और सभी बाइनरी सर्च ट्री की तरह, स्व-संतुलन बाइनरी सर्च ट्री अपने तत्वों को क्रम में रखते हैं। इस प्रकार, इसके तत्वों को पार करना कम से कम सबसे बड़े पैटर्न का अनुसरण करता है, जबकि हैश तालिका को पार करने से तत्वों को यादृच्छिक क्रम में पाया जा सकता है। क्योंकि वे क्रम में हैं, वृक्ष-आधारित मानचित्र श्रेणी प्रश्नों को भी संतुष्ट कर सकते हैं (दो सीमाओं के बीच सभी मान खोजें) जबकि एक हैशमैप केवल सटीक मान पा सकता है। हालाँकि, हैश तालिकाओं में O(1) के सेल्फ-बैलेंसिंग बाइनरी सर्च ट्री की तुलना में बहुत बेहतर औसत-केस समय जटिलता होती है, और जब एक अच्छे हैश फ़ंक्शन का उपयोग किया जाता है, तो उनका सबसे खराब स्थिति वाला प्रदर्शन अत्यधिक असंभावित होता है।

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


अन्य पेड़

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

तुलना

Underlying data structure Lookup or Removal Insertion Ordered
average worst case average worst case
Hash table O(1) O(n) O(1) O(n) No
Self-balancing binary search tree O(log n) O(log n) O(log n) O(log n) Yes
unbalanced binary search tree O(log n) O(n) O(log n) O(n) Yes
Sequential container of key–value pairs
(e.g. association list)
O(n) O(n) O(1) O(1) No


आदेशित शब्दकोश

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

  • छँटाई द्वारा कुंजियों के दिए गए सेट के लिए गणना का क्रम हमेशा नियतात्मक होता है। यह वृक्ष-आधारित कार्यान्वयन का मामला है, एक प्रतिनिधि है <map> C++ का कंटेनर।[16]
  • गणना का क्रम कुंजी-स्वतंत्र है और इसके बजाय प्रविष्टि के क्रम पर आधारित है। यह .NET Framework, Java (प्रोग्रामिंग भाषा) के LinkedHashMap और Python (प्रोग्रामिंग भाषा) में क्रमबद्ध शब्दकोश का मामला है।[17][18][19]

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

भाषा समर्थन

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

साहचर्य सरणियों के लिए अंतर्निहित वाक्यविन्यास समर्थन 1969 में SNOBOL द्वारा नाम तालिका के तहत पेश किया गया था। टीएमजी (भाषा) ने स्ट्रिंग कुंजियों और पूर्णांक मानों के साथ तालिकाएँ पेश कीं। MUMPS ने बहु-आयामी साहचर्य सरणियाँ बनाईं, वैकल्पिक रूप से लगातार, इसकी प्रमुख डेटा संरचना। SETL ने सेट और मानचित्रों के संभावित कार्यान्वयन में से एक के रूप में उनका समर्थन किया। अधिकांश आधुनिक स्क्रिप्टिंग भाषाएँ, AWK से शुरू होती हैं और इसमें Rexx, Perl, PHP, Tcl, JavaScript, Maple (सॉफ़्टवेयर), Python (प्रोग्रामिंग भाषा), रूबी (प्रोग्रामिंग भाषा), वोल्फ्राम भाषा, Go (प्रोग्रामिंग भाषा), और Lua (प्रोग्रामिंग) शामिल हैं। भाषा), प्राथमिक कंटेनर प्रकार के रूप में सहयोगी सरणियों का समर्थन करता है। कई अन्य भाषाओं में, वे विशेष सिंटैक्स के बिना लाइब्रेरी फ़ंक्शंस के रूप में उपलब्ध हैं।

स्मॉलटॉक में, उद्देश्य सी , .NET फ्रेमवर्क|.NET,[20] पायथन (प्रोग्रामिंग भाषा), वास्तविक बुनियादी , स्विफ्ट (प्रोग्रामिंग भाषा), एप्लीकेशन के लिए विजुअल बेसिक और डेल्फी (प्रोग्रामिंग भाषा)[21] उन्हें शब्दकोश कहा जाता है; पर्ल, रूबी (प्रोग्रामिंग भाषा) और सही में उन्हें हैश कहा जाता है; C++, Java (प्रोग्रामिंग भाषा), Go (प्रोग्रामिंग भाषा), क्लोजर, स्काला (प्रोग्रामिंग भाषा), OCaml, हास्केल (प्रोग्रामिंग भाषा) में उन्हें मैप कहा जाता है (मैप देखें (C++), unordered_map (C++), और Map); सामान्य लिस्प और विंडोज़ पॉवरशेल में, उन्हें हैश टेबल कहा जाता है (क्योंकि दोनों आमतौर पर इस कार्यान्वयन का उपयोग करते हैं); मेपल (सॉफ़्टवेयर) और लुआ में, उन्हें टेबल कहा जाता है। PHP में, सभी सारणियाँ सहयोगी हो सकती हैं, सिवाय इसके कि कुंजियाँ पूर्णांक और स्ट्रिंग तक सीमित हैं। जावास्क्रिप्ट में (JSON भी देखें), सभी ऑब्जेक्ट स्ट्रिंग-मूल्य वाली कुंजियों के साथ सहयोगी सरणियों के रूप में व्यवहार करते हैं, जबकि मैप और वीकमैप प्रकार मनमाने ढंग से ऑब्जेक्ट को कुंजी के रूप में लेते हैं। लुआ में, उनका उपयोग सभी डेटा संरचनाओं के लिए आदिम बिल्डिंग ब्लॉक के रूप में किया जाता है। विजुअल फॉक्सप्रो में, उन्हें कलेक्शंस कहा जाता है। डी (प्रोग्रामिंग भाषा) में सहयोगी सरणियों के लिए भी समर्थन है।[22]


स्थायी भंडारण

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

बाद c. 2010, क्लाउड कम्प्यूटिंग के लिए उपयुक्त उच्च-प्रदर्शन डेटाबेस की आवश्यकता और उनका उपयोग करने वाले कार्यक्रमों की आंतरिक संरचना से अधिक निकटता से कुंजी-मूल्य स्टोर बाजार में पुनर्जागरण हुआ। ये सिस्टम सहयोगी सरणियों को मूल तरीके से संग्रहीत और पुनः प्राप्त कर सकते हैं, जो सामान्य वेब-संबंधित वर्कफ़्लो में प्रदर्शन में काफी सुधार कर सकते हैं।

यह भी देखें

  • कुंजी-मूल्य डेटाबेस
  • टुपल
  • फ़ंक्शन (गणित)
  • जेएसओएन

संदर्भ

  1. Collins, Graham; Syme, Donald (1995). "परिमित मानचित्रों का एक सिद्धांत". Higher Order Logic Theorem Proving and Its Applications. Lecture Notes in Computer Science. 971: 122–137. doi:10.1007/3-540-60275-5_61. ISBN 978-3-540-60275-0.
  2. Andersson, Arne (1989). "शब्दकोश समस्या पर इष्टतम सीमाएँ". Proc. Symposium on Optimal Algorithms. Lecture Notes in Computer Science. Springer Verlag. 401: 106–114. doi:10.1007/3-540-51859-2_10. ISBN 978-3-540-51859-4.
  3. 3.0 3.1 3.2 3.3 3.4 Goodrich, Michael T.; Tamassia, Roberto (2006), "9.1 The Map Abstract Data Type", Data Structures & Algorithms in Java (4th ed.), Wiley, pp. 368–371
  4. 4.0 4.1 4.2 4.3 Mehlhorn, Kurt; Sanders, Peter (2008), "4 Hash Tables and Associative Arrays", Algorithms and Data Structures: The Basic Toolbox (PDF), Springer, pp. 81–98, archived (PDF) from the original on 2014-08-02
  5. 5.0 5.1 5.2 5.3 Cormen, Thomas H.; Leiserson, Charles E.; Rivest, Ronald L.; Stein, Clifford (2001), "11 Hash Tables", Introduction to Algorithms (2nd ed.), MIT Press and McGraw-Hill, pp. 221–252, ISBN 0-262-03293-7.
  6. 6.0 6.1 Dietzfelbinger, M., Karlin, A., Mehlhorn, K., Meyer auf der Heide, F., Rohnert, H., and Tarjan, R. E. 1994. "Dynamic Perfect Hashing: Upper and Lower Bounds" Archived 2016-03-04 at the Wayback Machine. SIAM J. Comput. 23, 4 (Aug. 1994), 738-761. http://portal.acm.org/citation.cfm?id=182370 doi:10.1137/S0097539791194094
  7. Goodrich & Tamassia (2006), pp. 597–599.
  8. 8.0 8.1 Black, Paul E.; Stewart, Rob (2 November 2020). "शब्दकोष". Dictionary of Algorithms and Data Structures. Retrieved 26 January 2022.
  9. Goodrich & Tamassia (2006), pp. 389–397.
  10. "When should I use a hash table instead of an association list?". lisp-faq/part2. 1996-02-20.
  11. Klammer, F.; Mazzolini, L. (2006), "Pathfinders for associative maps", Ext. Abstracts GIS-l 2006, GIS-I, pp. 71–74.
  12. Joel Adams and Larry Nyhoff. "Trees in STL". Quote: "The Standard Template library ... some of its containers -- the set<T>, map<T1, T2>, multiset<T>, and multimap<T1, T2> templates -- are generally built using a special kind of self-balancing binary search tree called a red–black tree."
  13. Knuth, Donald (1998). कंप्यूटर प्रोग्रामिंग की कला. Vol. 3: Sorting and Searching (2nd ed.). Addison-Wesley. pp. 513–558. ISBN 0-201-89685-0.
  14. Probst, Mark (2010-04-30). "रैखिक बनाम बाइनरी खोज". Retrieved 2016-11-20.
  15. Alvarez, Victor; Richter, Stefan; Chen, Xiao; Dittrich, Jens (April 2015). "अनुकूली मूलांक वृक्षों और हैश तालिकाओं की तुलना". 2015 IEEE 31st International Conference on Data Engineering. Seoul, South Korea: IEEE: 1227–1238. doi:10.1109/ICDE.2015.7113370. ISBN 978-1-4799-7964-6. S2CID 17170456.
  16. "std::map". en.cppreference.com.
  17. "ऑर्डर्ड डिक्शनरी क्लास (सिस्टम.संग्रह.विशेषीकृत)". MS Docs.
  18. "लिंक्डहैशमैप".
  19. "collections — Container datatypes — Python 3.9.0a3 documentation". docs.python.org.
  20. "Dictionary<TKey, TValue> Class". MSDN.
  21. "System.Generic.Collections.Dictionary - आरएडी स्टूडियो एपीआई दस्तावेज़ीकरण". docwiki.embarcadero.com. Retrieved 2017-04-18.
  22. "एसोसिएटिव एरेज़, डी प्रोग्रामिंग भाषा". Digital Mars.
  23. "Archives and Serializations Programming Guide", Apple Inc., 2012


बाहरी संबंध