यह यहां पोस्ट किए गए अन्य लोगों की तुलना में एक महत्वपूर्ण रूप से अधिक कुशल समाधान है, विशेष रूप से शीर्ष समाधान:
bool isSubset = t2.All(elem => t1.Contains(elem));
यदि आप टी 2 में एक तत्व नहीं पा सकते हैं जो टी 1 में नहीं है, तो आप जानते हैं कि टी 2 टी 1 का सबसेट नहीं है। इस विधि का लाभ यह है कि यह सभी इन-जगह किया जाता है, अतिरिक्त स्थान का आवंटन बिना, .Except या .Intersect का उपयोग कर समाधान के विपरीत है। इसके अलावा, इस समाधान, के रूप में यह एक भी तत्व यह है कि सबसेट हालत का उल्लंघन करता है जैसे ही तोड़ने में सक्षम है, जबकि अन्य खोज कर रहे हैं। नीचे समाधान है, जो केवल मामूली तेजी से ऊपर आशुलिपि समाधान की तुलना में मेरी परीक्षणों में है के इष्टतम लंबे रूप है।
bool isSubset = true;
foreach (var element in t2) {
if (!t1.Contains(element)) {
isSubset = false;
break;
}
}
मैंने सभी समाधानों का कुछ प्राथमिक प्रदर्शन विश्लेषण किया, और परिणाम कठोर हैं। ये दो समाधान .xcept() और .tersect() समाधान से लगभग 100x तेज हैं, और कोई अतिरिक्त मेमोरी का उपयोग नहीं करते हैं।
यदि सूचियों को क्रमबद्ध किया गया है (जैसा कि आपके उदाहरण में है), यह ओ (एन + एम) समय में संभव होना चाहिए। –