सेट (अमूर्त डेटा प्रकार): Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
 
Line 1: Line 1:
{{Short description|Abstract data type for storing unique values}}
{{Short description|Abstract data type for storing unique values}}
[[कंप्यूटर विज्ञान]] में, सेट एक [[सार डेटा प्रकार]] है जो बिना किसी विशेष क्रम के अद्वितीय मूल्यों को संग्रहीत कर सकता है। यह परिमित सेट की गणित अवधारणा का कंप्यूटर कार्यान्वयन है। अधिकांश अन्य [[संग्रह (सार डेटा प्रकार)]] प्रकारों के विपरीत, सेट से विशिष्ट तत्व को पुनः प्राप्त करने के अतिरिक्त, सामान्यतः सेट में सदस्यता के लिए मूल्य का परीक्षण किया जाता है।
कंप्यूटर विज्ञान में, '''सेट''' एक सार डेटा प्रकार है जो बिना किसी विशेष क्रम के अद्वितीय मूल्यों को संग्रहीत कर सकता है। यह परिमित सेट की गणित अवधारणा का कंप्यूटर कार्यान्वयन है। अधिकांश अन्य [[संग्रह (सार डेटा प्रकार)]] प्रकारों के विपरीत, सेट से विशिष्ट तत्व को पुनः प्राप्त करने के अतिरिक्त, सामान्यतः सेट में सदस्यता के लिए मूल्य का परीक्षण किया जाता है।


कुछ सेट डेटा संरचनाएं स्थिर या एकत्रित सेट के लिए चित्रित किए गए हैं जो उनके निर्माण के पश्चात परिवर्तित नहीं होते हैं। स्थिर सेट स्वयं तत्वों पर केवल क्वेरी संचालन की अनुमति देते हैं- जैसे कि यह देखना कि क्या दिया गया मान सेट में है, या क्रम में मानों की गणना करना अन्य वेरिएंट, जिन्हें डायनेमिक सेट कहा जाता है, सेट से तत्वों को सम्मिलित करने एवं विस्थापित करने की भी अनुमति देते हैं।
कुछ सेट डेटा संरचनाएं स्थिर या एकत्रित सेट के लिए चित्रित किए गए हैं जो उनके निर्माण के पश्चात परिवर्तित नहीं होते हैं। स्थिर सेट स्वयं तत्वों पर केवल क्वेरी संचालन की अनुमति देते हैं- जैसे कि यह देखना कि क्या दिया गया मान सेट में है, या क्रम में मानों की गणना करना अन्य वेरिएंट, जिन्हें डायनेमिक सेट कहा जाता है, सेट से तत्वों को सम्मिलित करने एवं विस्थापित करने की भी अनुमति देते हैं।
Line 147: Line 147:
==टिप्पणियाँ==
==टिप्पणियाँ==
{{Notelist}}
{{Notelist}}


==संदर्भ==
==संदर्भ==
{{Reflist}}
{{Reflist}}
{{Data types}}
{{Data structures}}


[[Category:Articles with hatnote templates targeting a nonexistent page]]
[[Category:Articles with hatnote templates targeting a nonexistent page]]

Latest revision as of 16:10, 30 October 2023

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

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

बहुसेट विशेष प्रकार का सेट है, जिसमें तत्व सेट में कई बार दिखाई दे सकता है।

प्रकार सिद्धांत

प्रकार सिद्धांत में, सेट सामान्यतः उनके संकेतक फ़ंक्शन (विशेषता समारोह) के साथ पहचाने जाते हैं: तदनुसार, प्रकार के मूल्यों का सेट या द्वारा दर्शाया जा सकता है। (उपप्रकार एवं सेट को शोधन प्रकार द्वारा प्रतिरूपित किया जा सकता है, एवं भागफल सेट को परिवर्तनीय सेट द्वारा प्रतिस्थापित किया जा सकता है।) विशेषता कार्य सेट को के रूप में परिभाषित किया जाता है।

सिद्धांत रूप में, कई अन्य अमूर्त डेटा संरचनाओं को मानक संचालन पर लगाए गए अतिरिक्त संचालन एवं अतिरिक्त सिद्धांतों के साथ सेट संरचनाओं के रूप में देखा जा सकता है। उदाहरण के लिए, अमूर्त हीप डेटा संरचना को सेट संरचना के रूप में देखा जा सकता है min(S) संचालन जो सबसे अल्प मूल्य का तत्व लौटाता है।

संचालन

कोर सेट-सैद्धांतिक संचालन

कोई सेट के बीजगणित के संचालन को परिभाषित कर सकता है:

  • union(S,T): सेट S एवं T का संघ (सेट सिद्धांत) लौटाता है।
  • intersection(S,T): सेट S एवं T का प्रतिच्छेदन (सेट सिद्धांत) लौटाता है।
  • difference(S,T): सेट S एवं T का अंतर (सेट सिद्धांत) लौटाता है।
  • subset(S,T): विधेय जो परीक्षण करता है कि क्या सेट S, T का सेट है।

स्थैतिक सेट

स्थैतिक सेट स्थिर S द्वारा प्रदान किए जा सकने वाले विशिष्ट संचालन हैं:

  • is_element_of(x,S): परिक्षण किया जाता है कि क्या मान x सेट S में है।
  • is_empty(S): परिक्षण किया जाता है कि सेट S रिक्त है या नहीं।
  • size(S) या cardinality(S): S में तत्वों की संख्या लौटाता है।
  • iterate(S): ऐसा फ़ंक्शन लौटाता है जो प्रत्येक आह्वान पर S का क्रम में मान देता है।
  • enumerate(S): कुछ क्रम में S के तत्वों वाली सूची देता है।
  • build(x1,x2,…,xn,): मान x के साथ x1,x2,...,xn सेट संरचना बनाता है।
  • create_from(collection): दिए गए संग्रह के सभी तत्वों (सार डेटा प्रकार) या दिए गए पुनरावर्तक द्वारा लौटाए गए सभी तत्वों वाली नई सेट संरचना बनाता है।

गतिशील सेट

गतिशील सेट संरचनाएं सामान्यतः जोड़ती हैं,

  • create(): प्रारंभ में रिक्त सेट संरचना बनाता है।
    • create_with_capacity(n): नई सेट संरचना बनाता है, प्रारंभ में रिक्त किन्तु n तत्वों तक धारण करने में सक्षम होते है।
  • add(S,x): तत्व x को S में जोड़ता है, यदि यह पहले से उपस्थित नहीं है।
  • remove(S, x): तत्व x को S से विस्थापित करता है, यदि यह उपस्थित है।
  • capacity(S): S द्वारा धारण किए जा सकने वाले मानों की अधिकतम संख्या लौटाता है।

कुछ सेट संरचनाएं इनमें से केवल कुछ परिचालनों की अनुमति दे सकती हैं। प्रत्येक संचालन के वित्त कार्यान्वयन पर निर्भर करेगी, एवं संभवतः सेट में संग्रहीत विशेष मूल्यों पर भी, एवं जिस क्रम में उन्हें सम्मिलित किया गया है।

अतिरिक्त संचालन

ऐसे कई अन्य संचालन हैं जिन्हें (सिद्धांत रूप में) उपरोक्त के संदर्भ में परिभाषित किया जा सकता है, जैसे:

  • pop(S): S का एक तत्व लौटाता है, इसे S से विस्थापित कर देता है।[1]
  • pick(S): S का तत्व लौटाता है।[2][3][4] कार्यात्मक रूप से, उत्परिवर्ती pop चयनकर्ताओं की जोड़ी के रूप में व्याख्या की जा सकती है (pick, rest), जहाँ rest तत्व को त्यागकर सभी तत्वों से युक्त सेट लौटाता है।[5] iterate के रूप में समझा जा सकता है। [lower-alpha 1]
  • map(F,S): फ़ंक्शन F को S के प्रत्येक तत्व पर प्रारम्भ करने के परिणामस्वरूप भिन्न मानों का सेट लौटाता है।
  • filter(P,S): s के सभी तत्वों से युक्त सबसेट लौटाता है जो किसी दिए गए विधेय (गणितीय तर्क) p को संतुष्ट करता है।
  • fold(A0,F,S): मान A|S| लौटाता है, आवेदन करने के पश्चात Ai+1 := F(Ai, e) S के प्रत्येक तत्व e के लिए, कुछ बाइनरी संचालन F के लिए परिभाषित करने के लिए सहयोगी एवं कम्यूटेटिव होना चाहिए।
  • clear(S): s के सभी तत्वों को विस्थापित कर दें।
  • equal(S1', S2'): परीक्षण करता है कि क्या दिए गए दो सेट समान हैं (अर्थात सभी एवं केवल समान तत्व सम्मिलित हैं)।
  • hash(S): स्थिर सेट S के लिए मिश्रण मान लौटाता है जैसे कि if equal(S1, S2) तब hash(S1) = hash(S2) है।

अन्य कार्यों को विशेष प्रकार के तत्वों वाले सेट के लिए परिभाषित किया जा सकता है:

  • sum(S): योग की कुछ परिभाषा के लिए S के सभी तत्वों का योग लौटाता है। उदाहरण के लिए, पूर्णांक या वास्तविक से अधिक, इसे fold(0, add, S) इस रूप में परिभाषित किया जा सकता है।
  • collapse(S): सेट का sumसेट दिया गया है, संघ वापस करें,[6] उदाहरण के लिए, collapse({{1}, {2, 3}}) == {1, 2, 3} प्रकार का माना जा सकता है।
  • flatten(S): सेट एवं परमाणु तत्वों (तत्व जो सेट नहीं हैं) से मिलकर सेट दिया गया है, सेट देता है जिसके तत्व मूल शीर्ष-स्तरीय सेट के परमाणु तत्व या सेट के तत्व होते हैं। दूसरे शब्दों में, नेस्टिंग के स्तर को विस्थापित कर दें- जैसे collapse, किन्तु परमाणुओं की अनुमति दें। यह किया जा सकता है, या केवल परमाणु तत्वों का सेट प्राप्त करने के लिए पुनरावर्ती किया जा सकता है।[7] उदाहरण के लिए, flatten({1, {2, 3}}) == {1, 2, 3}होता है।
  • nearest(S,x): S का तत्व लौटाता है जो x के मूल्य में निकटतम है (कुछ मीट्रिक (गणित) द्वारा)।
  • min(S), max(S): S का न्यूनतम/अधिकतम तत्व लौटाता है।

कार्यान्वयन

विभिन्न डेटा संरचनाओं का उपयोग करके सेट को प्रारम्भ किया जा सकता है, जो विभिन्न कार्यों के लिए भिन्न-भिन्न समय एवं स्थान का समाधान प्रदान करते हैं। कुछ कार्यान्वयन अधिक विशिष्ट संचालन की दक्षता में सुधार के लिए चित्रित किए गए हैं, जैसे nearest या union सामान्य उपयोग के रूप में वर्णित कार्यान्वयन सामान्यतः अनुकूलित करने का प्रयास करते हैं, element_of, add, एवं delete संचालन सरल कार्यान्वयन सूची (सार डेटा प्रकार) का उपयोग करता है, तत्वों के क्रम को अप्रत्यक्ष करना एवं बार-बार मूल्यों से बचने के लिए ध्यान रखना, यह सरल किन्तु अक्षम है, क्योंकि सेट सदस्यता या तत्व विलोपन जैसे संचालन O (N) हैं, क्योंकि उन्हें पूर्ण रूप से सूची को स्कैन करने की आवश्यकता होती है।[lower-alpha 2] सेट को प्रायः अधिक कुशल डेटा संरचनाओं का उपयोग करके कार्यान्वित किया जाता है।

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

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

my %elements = map { $_ => 1 } @elements;

अन्य लोकप्रिय विधियों में सरणी डेटा संरचना सम्मिलित है। विशेष रूप से पूर्णांक 1..n का सेट n- बिट सरणी के रूप में कुशलतापूर्वक कार्यान्वित किया जा सकता है, जो अधिक ही कुशल संघ एवं अन्तःखण्ड के संचालन का भी समर्थन करता है। ब्लूम मैप अधिक ही ठोस प्रतिनिधित्व का उपयोग करते हुए संभावित रूप से सेट को प्रारम्भ करता है, किन्तु प्रश्नों पर सकारात्मकता की अल्प संभावना को संकट में डालता है।

बूलियन सेट संचालनों को अधिक प्राथमिक संचालनों के संदर्भ में कार्यान्वित किया जा सकता है (pop, clear, एवं add), किन्तु विशेष एल्गोरिदम अर्घ्य स्पर्शोन्मुख समय सीमा उत्पन्न कर सकते हैं। यदि सेट को क्रम की गई सूचियों के रूप में कार्यान्वित किया जाता है, उदाहरण के लिए, एल्गोरिथ्म के लिए union(S,T) S की लंबाई m गुणा T की लंबाई n के अनुपात में समय लगेगा, जबकि मर्ज एल्गोरिथम का संस्करण m+n के आनुपातिक समय में कार्य करेगा। इसके अतिरिक्त, विशेष सेट डेटा संरचनाएं हैं (जैसे कि लिस्ट मर्जिंग एल्गोरिथ्म) जो दूसरों के मूल्य पर इनमें से अधिक संचालन के लिए अनुकूलित हैं।

भाषा समर्थन

पास्कल प्रोग्रामिंग भाषा सेट का समर्थन करने वाली प्रारंभिक भाषाओं में से थी; कई भाषाओं में अब यह सम्मिलित है, मूल भाषा में हो या किसी मानक पुस्तकालय में होता है।

  • C++ में, मानक टेम्पलेट पुस्तकालय (STL) प्रदान करती है set टेम्प्लेट कक्ष, जिसे सामान्यतः बाइनरी सर्च ट्री (जैसे लाल-काले पेड़) का उपयोग करके प्रारम्भ किया जाता है; सिलिकॉन ग्राफिक्स इंटरनेशनल का एसटीएल भी प्रदान करता है hash_set टेम्प्लेट कक्ष, जो मिश्रण सारणी का उपयोग करके एक सेट को प्रारम्भ करता है। C++11 के लिए समर्थन है unordered_set टेम्प्लेट कक्ष, जिसे मिश्रण सारणी का उपयोग करके कार्यान्वित किया जाता है। सेट में, तत्व स्वयं कुंजी हैं, अनुक्रमित कंटेनरों के विपरीत, जहां तत्वों को उनकी (सापेक्ष या पूर्ण) स्थिति का उपयोग करके अभिगम किया जाता है। सेट तत्वों में शक्तिहीन क्रम होना चाहिए।
  • रस्ट (प्रोग्रामिंग भाषा) मानक पुस्तकालय सामान्य प्रदान HashSet एवं BTreeSet प्रकार करता है।
  • जावा (प्रोग्रामिंग भाषा) प्रदान करता है Set अंतरापृष्ठ (कंप्यूटर विज्ञान) सेट का समर्थन करने के लिए ( HashSet वर्ग इसे मिश्रण सारणी का उपयोग करके कार्यान्वित करता है), एवं SortedSet सॉर्ट किए गए सेटों का समर्थन करने के लिए उप-अंतराफलक( TreeSet वर्ग इसे बाइनरी सर्च ट्री का उपयोग करके कार्यान्वित करता है)।
  • ऐप्पल इंक की फाउंडेशन किट (कोको (एपीआई) का भाग) उद्देश्य C कक्ष प्रदान करती है NSSet, NSMutableSet, NSCountedSet, NSOrderedSet, एवं NSMutableOrderedSetकोर फाउंडेशन एपीआई इनके लिए CFSet एवं CFMutableSet प्रकार प्रदान करता है। C (प्रोग्रामिंग भाषा) में उपयोग करते है।
  • पायथन (प्रोग्रामिंग भाषा) में अंतर्निहित है set एवं frozenset प्रकार 2.4 के पश्चात से, एवं पायथन 3.0 एवं 2.7 के पश्चात से, कर्ली-ब्रैकेट सिंटैक्स का उपयोग करके गैर-रिक्त सेट शाब्दिक का समर्थन करता है, जैसे: {x, y, z}; रिक्त सेट का उपयोग करके बनाया जाना चाहिए set(), क्योंकि पायथन उपयोग {} रिक्त शब्दकोश का प्रतिनिधित्व करने के लिए करता है।
  • .NET फ्रेमवर्क जेनेरिक प्रदान करता है HashSet एवं SortedSet कक्षाएं जो सामान्य ISet अंतराफलकको प्रारम्भ करती हैं।
  • स्मॉलटॉक की कक्ष पुस्तकालय में सम्मिलित हैं Set एवं IdentitySetसमावेशन परीक्षण के लिए क्रमशः समानता एवं पहचान का उपयोग करना, कई बोलियाँ संपीडित भंडारण के लिए भिन्नताएँ प्रदान करती हैं (NumberSet, CharacterSet), ऑर्डर करने के लिए (OrderedSet, SortedSet, आदि) या शक्तिहीन संदर्भ (WeakIdentitySet) के लिए होता है ।
  • रूबी (प्रोग्रामिंग भाषा) के मानक पुस्तकालय में a set सम्मिलित है, Set एवं SortedSetमॉड्यूल जिसमें सम्मिलित है कक्षाएं जो मिश्रण सारणी का उपयोग करके सेट को प्रारम्भ करती हैं, पश्चात वाले क्रमबद्ध क्रम में पुनरावृत्ति की अनुमति देते हैं।
  • ओ कैमल की मानक पुस्तकालय में a सम्मिलित होता है, Set मॉड्यूल, जो बाइनरी सर्च ट्री का उपयोग करके कार्यात्मक सेट डेटा संरचना को प्रारम्भ करता है।
  • हास्केल (प्रोग्रामिंग भाषा) का ग्लासगो हास्केल कंपाइलर कार्यान्वयन प्रदान करता है Data.Set मॉड्यूल, जो बाइनरी सर्च ट्री का उपयोग करके अपरिवर्तनीय सेट को प्रारम्भ करता है।[9]
  • टीसीएल टीसीएललिब पैकेज सेट मॉड्यूल प्रदान करता है जो टीसीएल सूचियों के आधार पर सेट डेटा संरचना को प्रारम्भ करता है।
  • स्विफ्ट (प्रोग्रामिंग भाषा) a Set प्रकार, स्विफ्ट 1.2 के पश्चात से स्टैंडर्ड पुस्तकालय में होता है।
  • जावास्क्रिप्ट Set ईसीएमएस्क्रिप्ट 2015 के साथ मानक अंतर्निर्मित वस्तु के रूप में प्रस्तुत किया [10] है।
  • Erlang (प्रोग्रामिंग भाषा) की मानक पुस्तकालय में a sets मापांक होता है।
  • क्लोजर में मिश्रण सेट के लिए शाब्दिक सिंटैक्स है, एवं सॉर्ट किए गए सेट को भी प्रारम्भ करता है।
  • लैबव्यू के निकट संस्करण 2019 से सेट के लिए मूल समर्थन है।
  • एडीए (प्रोग्रामिंग भाषा) Ada.Containers.Hashed_Sets एवं Ada.Containers.Ordered_Sets संकुल प्रदान करता है।

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

बहुसेट

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

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

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

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

  • C++ की मानक टेम्पलेट पुस्तकालय चयन किए गए एवं अवर्गीकृत बहुसेट दोनों को प्रारम्भ करती है। यह multiset क्रमबद्ध बहुसेट के लिए कक्ष प्रदान करता है, अस्सोसिएटिवे कंटेनर (C ++) के रूप में, जो स्व-संतुलन बाइनरी सर्च ट्री का उपयोग करके इस बहुसेट को प्रारम्भ करता है। यह unordered_multiset अनऑर्डरेड एसोसिएटिव कंटेनर (C ++)के रूप में अवर्गीकृत बहुसेट के लिए कक्ष प्रदान करता है, जो मिश्रण सारणी का उपयोग करके इस बहुसेट को प्रारम्भ करता है। अवर्गीकृत बहुसेट C++11 के अनुसार मानक है; प्रथम एसजीआई का एसटीएल प्रदान करता है hash_multiset कक्ष, जिसे कॉपी किया गया एवं अंततः मानकीकृत किया गया।
  • जावा (प्रोग्रामिंग भाषा) के लिए, तृतीय-पक्ष पुस्तकालय बहुसेट कार्यक्षमता प्रदान करते हैं।
    • अपाचे कॉमन्स संग्रह Bag एवं SortedBag अंतरापृष्ठ, जैसे कक्षाओं को प्रारम्भ करने के साथ HashBag एवं TreeBagप्रदान करता है।
    • गूगल Multiset अंतरापृष्ठ, जैसे कक्षाओं को प्रारम्भ करने के साथ गुआवा HashMultiset एवं TreeMultiset प्रदान करता है।
  • एप्प्ल प्रदान करता है NSCountedSet कोको (एपीआई) के रूप में कक्ष, प्रकार CFBag एवं CFMutableBag कोर फाउंडेशन के रूप में प्रदान करता है।
  • पायथन (प्रोग्रामिंग भाषा) के मानक पुस्तकालय में सम्मिलित हैं collections.Counter, जो बहुसेट के समान है।
  • स्मॉलटाक में Bagसम्मिलित हैं, वर्ग जिसे समावेशन परीक्षण के लिए विधेय के रूप में या तो पहचान या समानता का उपयोग करने के लिए तत्काल किया जा सकता है।

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

बैग पर विशिष्ट संचालन:

  • contains(B, x): शोधन करता है कि बैग B में तत्व X उपस्थित है।
  • is_sub_bag(B1, B2): शोधन करता है कि बैग B1 में प्रत्येक तत्व है या B1 में नहीं होता है, बैग B2 में होने की तुलना में अधिक बार नहीं; कभी-कभी B1B2 के रूप में दर्शाया जाता है।
  • count(B, x): तत्व x के बैग B में होने की संख्या लौटाता है; कभी-कभी B, x के रूप में दर्शाया जाता है।
  • scaled_by(B, n): प्राकृतिक संख्या n दिया गया है, जिसमें बैग B के समान तत्व होते हैं, प्रत्येक तत्व जो B में M बार होता है परिणामी बैग में n * m बार होता है; कभी-कभी n ⊗ B के रूप में निरूपित किया जाता है।
  • union(B1, B2): बैग B1 या B2 देता है, जिसमें केवल वे मान होते हैं, जो उन मानों वाले बैग को लौटाता है, इसके कि परिणामी बैग में मान x की संख्या समान होती है (B1 # x) + (B2 # x), कभी-कभी B1 ⊎ B2 के रूप में निरूपित किया जाता है

एसक्यूएल बहुसेट संबंधपरक डेटाबेस प्रबंधन प्रणाली में, सारणी (गणितीय) सेट या बहुसेट हो सकती है, जो कुछ स्तंभों पर एकता की कमी की उपस्थिति पर निर्भर करता है।

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

एसक्यूएल मानकीकरण इतिहास में MULTISET उप-क्वेरी को संग्रह अभिव्यक्ति में परिवर्तित करने के लिए कीवर्ड का उपयोग किया जा सकता है।

SELECT expression1, expression2... FROM table_name...

सामान्य चयन है, जिसका उपयोग किसी अन्य सामान्य क्वेरी की सबक्वेरी अभिव्यक्ति के रूप में किया जा सकता है, जबकि

MULTISET(SELECT expression1, expression2... FROM table_name...)

सबक्वायरी को संग्रह अभिव्यक्ति में परिवर्तित कर देता है जिसका उपयोग किसी अन्य क्वेरी में या उचित संग्रह प्रकार के कॉलम में कार्यभार में किया जा सकता है।

यह भी देखें

टिप्पणियाँ

  1. For example, in Python pick can be implemented on a derived class of the built-in set as follows:
    class Set(set):
        def pick(self):
            return next(iter(self))
    
  2. Element insertion can be done in O(1) time by simply inserting at an end, but if one avoids duplicates this takes O(n) time.

संदर्भ

  1. Python: pop()
  2. Management and Processing of Complex Data Structures: Third Workshop on Information Systems and Artificial Intelligence, Hamburg, Germany, February 28 - March 2, 1994. Proceedings, ed. Kai v. Luck, Heinz Marburger, p. 76
  3. Python Issue7212: Retrieve an arbitrary element from a set without removing it; see msg106593 regarding standard name
  4. Ruby Feature #4553: Add Set#pick and Set#pop
  5. Inductive Synthesis of Functional Programs: Universal Planning, Folding of Finite Programs, and Schema Abstraction by Analogical Reasoning, Ute Schmid, Springer, Aug 21, 2003, p. 240
  6. Recent Trends in Data Type Specification: 10th Workshop on Specification of Abstract Data Types Joint with the 5th COMPASS Workshop, S. Margherita, Italy, May 30 - June 3, 1994. Selected Papers, Volume 10, ed. Egidio Astesiano, Gianna Reggio, Andrzej Tarlecki, p. 38
  7. Ruby: flatten()
  8. Wang, Thomas (1997), Sorted Linear Hash Table, archived from the original on 2006-01-12
  9. Stephen Adams, "Efficient sets: a balancing act", Journal of Functional Programming 3(4):553-562, October 1993. Retrieved on 2015-03-11.
  10. "ECMAScript 2015 Language Specification – ECMA-262 6th Edition". www.ecma-international.org (in British English). Retrieved 2017-07-11.