सेट (सार डेटा प्रकार)

From alpha
Jump to navigation Jump to search

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

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

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

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

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

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

संचालन

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

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

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

स्थैतिक सेट

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

  • is_element_of(x,S): जाँचता है कि मान x सेट S में है या नहीं।
  • is_empty(S): जाँचता है कि सेट S खाली है या नहीं।
  • size(S) या cardinality(S): एस में तत्वों की संख्या लौटाता है।
  • iterate(S): एक फ़ंक्शन लौटाता है जो प्रत्येक कॉल पर कुछ मनमाने क्रम में S का एक और मान लौटाता है।
  • enumerate(S): कुछ मनमाने क्रम में एस के तत्वों वाली एक सूची लौटाता है।
  • build(x1,x2,…,xn,): मान x के साथ एक सेट संरचना बनाता है1,एक्स2,...,एक्सn.
  • 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): एस के प्रत्येक तत्व पर फ़ंक्शन एफ लागू करने से उत्पन्न विशिष्ट मानों का सेट लौटाता है।
  • filter(P,S): एस के सभी तत्वों वाला उपसमुच्चय लौटाता है जो किसी दिए गए विधेय (गणितीय तर्क) पी को संतुष्ट करता है।
  • fold(A0,F,S): मान A लौटाता है|S| आवेदन करने के बाद Ai+1 := F(Ai, e) एस के प्रत्येक तत्व ई के लिए, कुछ बाइनरी ऑपरेशन एफ के लिए। इसे अच्छी तरह से परिभाषित करने के लिए एफ को साहचर्य और क्रमविनिमेय होना चाहिए।
  • clear(S): S के सभी तत्वों को हटा दें।
  • equal(S1', S2'): जाँचता है कि क्या दिए गए दो सेट समान हैं (अर्थात् सभी और केवल समान तत्व शामिल हैं)।
  • hash(S): स्थिर सेट S के लिए एक हैश मान लौटाता है जैसे कि यदि equal(S1, S2) तब hash(S1) = hash(S2)

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

  • sum(S): योग की कुछ परिभाषा के लिए S के सभी तत्वों का योग लौटाता है। उदाहरण के लिए, पूर्णांकों या वास्तविकों पर, इसे इस प्रकार परिभाषित किया जा सकता है fold(0, add, S).
  • collapse(S): सेट का एक सेट दिया गया है, यूनियन लौटाएं।[6] उदाहरण के लिए, collapse({{1}, {2, 3}}) == {1, 2, 3}. एक प्रकार का माना जा सकता है sum.
  • 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 परिचालन. एक सरल कार्यान्वयन एक सूची (सार डेटा प्रकार) का उपयोग करना है, तत्वों के क्रम को अनदेखा करना और दोहराए गए मूल्यों से बचने का ध्यान रखना है। यह सरल लेकिन अकुशल है, क्योंकि सेट सदस्यता या तत्व विलोपन जैसे ऑपरेशन ओ (एन) हैं, क्योंकि उन्हें पूरी सूची को स्कैन करने की आवश्यकता होती है।[lower-alpha 2] सेट को अक्सर अधिक कुशल डेटा संरचनाओं, विशेष रूप से पेड़ के विभिन्न स्वादों (डेटा संरचना), कोशिशों या हैश तालिकाओं का उपयोग करके कार्यान्वित किया जाता है।

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

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

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

अन्य लोकप्रिय तरीकों में ऐरे डेटा संरचना शामिल है। विशेष रूप से पूर्णांक 1..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 वर्ग इसे बाइनरी सर्च ट्री का उपयोग करके कार्यान्वित कर रहा है)।
  • ऐप्पल इंक का फाउंडेशन किट (कोको (एपीआई) का हिस्सा) उद्देश्य सी कक्षाएं प्रदान करता है NSSet, NSMutableSet, NSCountedSet, NSOrderedSet, और NSMutableOrderedSet. CoreFoundation API 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).
  • रूबी (प्रोग्रामिंग भाषा) की मानक लाइब्रेरी में एक शामिल है set मॉड्यूल जिसमें शामिल है Set और SortedSet कक्षाएं जो हैश तालिकाओं का उपयोग करके सेट लागू करती हैं, बाद वाली क्रमबद्ध क्रम में पुनरावृत्ति की अनुमति देती हैं।
  • OCaml की मानक लाइब्रेरी में एक शामिल है Set मॉड्यूल, जो बाइनरी सर्च ट्री का उपयोग करके एक कार्यात्मक सेट डेटा संरचना लागू करता है।
  • हास्केल (प्रोग्रामिंग भाषा) का ग्लासगो हास्केल कंपाइलर कार्यान्वयन एक प्रदान करता है Data.Set मॉड्यूल, जो बाइनरी सर्च ट्री का उपयोग करके अपरिवर्तनीय सेट लागू करता है।[9]
  • टी.सी.एल टीक्लिब पैकेज एक सेट मॉड्यूल प्रदान करता है जो टीसीएल सूचियों के आधार पर एक सेट डेटा संरचना लागू करता है।
  • स्विफ्ट (प्रोग्रामिंग भाषा) मानक लाइब्रेरी में एक शामिल है Set स्विफ्ट 1.2 के बाद से टाइप करें।
  • जावास्क्रिप्ट पेश किया गया Set ईसीएमएस्क्रिप्ट 2015 के साथ एक मानक अंतर्निर्मित ऑब्जेक्ट के रूप में[10] मानक।
  • एर्लांग (प्रोग्रामिंग भाषा) की मानक लाइब्रेरी में एक है sets मापांक।
  • क्लोजर में हैशेड सेट के लिए शाब्दिक वाक्यविन्यास है, और क्रमबद्ध सेट भी लागू करता है।
  • LabVIEW को संस्करण 2019 से सेट के लिए मूल समर्थन प्राप्त है।
  • Ada (प्रोग्रामिंग भाषा) प्रदान करता है Ada.Containers.Hashed_Sets और Ada.Containers.Ordered_Sets संकुल.

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

मल्टीसेट

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

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

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

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

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

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

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

  • contains(B, x): जाँचता है कि क्या तत्व x बैग B में मौजूद है (कम से कम एक बार)।
  • is_sub_bag(B1, B2): जाँचता है कि बैग में प्रत्येक तत्व बी है या नहीं1 बी में होता है1 इससे अधिक बार यह बैग बी में नहीं होता है2; कभी-कभी बी के रूप में दर्शाया जाता है1 ⊑ बी2.
  • count(B, x): बैग बी में तत्व x होने की संख्या लौटाता है; कभी-कभी इसे B # x के रूप में दर्शाया जाता है।
  • scaled_by(B, n): एक प्राकृतिक संख्या n दी गई है, एक बैग लौटाता है जिसमें बैग B के समान तत्व होते हैं, सिवाय इसके कि प्रत्येक तत्व जो B में m बार होता है, परिणामी बैग में n * m बार होता है; कभी-कभी n ⊗ B के रूप में दर्शाया जाता है।
  • union(B1, B2): एक बैग लौटाता है जिसमें केवल वे मान होते हैं जो बैग बी में होते हैं1 या बैग बी2, सिवाय इसके कि परिणामी बैग में किसी मान x के आने की संख्या (बी) के बराबर है1 # एक्स) + (बी2 # एक्स); कभी-कभी बी के रूप में दर्शाया जाता है1 ⊎ बी2.

एसक्यूएल में मल्टीसेट्स

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

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

SQL#मानकीकरण इतिहास में 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. Retrieved 2017-07-11.