दो std::set
एस दिए गए, कोई भी दोनों सेटों के साथ-साथ एक साथ फिर से सक्रिय हो सकता है और तत्वों की तुलना कर सकता है, जिसके परिणामस्वरूप रैखिक जटिलता हो सकती है। यह std::unordered_set
एस के लिए काम नहीं करता है, क्योंकि तत्व किसी भी क्रम में संग्रहीत किए जा सकते हैं। तो std::unordered_set
के लिए a == b
कितना महंगा है?समानता के लिए दो असाधारण सेट की तुलना कितनी महंगा है?
उत्तर
operator==
और operator!=
की जटिलता:
रैखिक जटिलता। एन सबसे खराब मामले में, जहां एन कंटेनर का आकार है। मानक §23.2.5 में
अधिक जानकारी, बिंदु 11:
unordered_set
के लिए और unordered_map
, की जटिलता operator==
(यानी, value_type
की ==
ऑपरेटर के लिए कॉल की संख्या, विधेय द्वारा वापस करने के लिए key_equal()
, और hasher hash_function()
द्वारा दिया) के लिए सबसे खराब स्थिति है, जहां N
a.size()
है में औसत के मामले में और एन को 2N
लिए आनुपातिक है।
ओ (एन²) का सबसे बुरा मामला है।
लेकिन असंगत सेट वास्तव में हैश द्वारा आदेश दिया गया है। तो हैश की तुलना करना संभव है (यदि यह सेट विफल हो जाता है तो बराबर नहीं हो सकता है) और उसके बाद सत्यापित करें कि उसी हैश (रैखिक) के पास एक ही हैश के साथ अलग-अलग मानों के लिए वास्तविक मूल्य (ओ (एन²) है।
सबसे अच्छे मामले में यह ओ (एन) है।
आम तौर पर जटिलता ओ (एन) होती है यदि हैश फ़ंक्शन "अच्छा" (अलग-अलग ऑब्जेक्ट्स -> हमेशा अलग हैश) और ओ (एन²) है यदि हैश फ़ंक्शन "खराब" है (सबकुछ हमेशा एक जैसा होता है हैश मान)
"हैश फ़ंक्शन अच्छा है (अलग-अलग ऑब्जेक्ट्स -> हमेशा अलग हैश)" -> एक भयानक हैश एल्गोरिदम के लिए अलग-अलग हैंश भी सच हो सकते हैं (उदाहरण के लिए 8 * 128-बिट हैश मान लौटाकर 128 वर्ण तक हैश स्ट्रिंग्स स्ट्रिंग), लेकिन बाल्टी की संख्या में संशोधन और परिणाम बदसूरत है। जब टक्कर से बचने में मदद करने वाले इनपुट में कोई विशेष अंतर्दृष्टि नहीं होती है, तो एक अच्छा हैश फ़ंक्शन पोस्ट मोडिंग आमतौर पर अप्रयुक्त बाल्टी के अनुपात में टकराव होता है ... जो अभी भी ओ (एन) औसत में परिणाम देता है। –
@ टोनीडेलॉय: इसे इंगित करने के लिए धन्यवाद! एक "अच्छा हैश" न केवल "अलग-अलग मूल्यों" को वापस लौटाएगा, बल्कि बाल्टीओं को "अच्छी तरह से वितरित" सम्मान भी देना चाहिए (हैश स्पेस बाल्टी के समान और प्रमुख सम्मान होना चाहिए, केवल आपके द्वारा उल्लेख किए गए प्रभाव को कम करने के लिए) –
- 1. समानता के लिए दो enum * प्रकार * की तुलना?
- 2. समानता के लिए दो अंग्रेजी तारों की तुलना
- 3. समानता के लिए दो numpy arrays की तुलना, तत्व-वार
- 4. स्मॉलटॉक - समानता के लिए दो तारों की तुलना करें
- 5. समानता के लिए बहुभुज की तुलना
- 6. समानता के लिए दो सूची <string> तुलना
- 7. दो चेहरे (और उनकी समानता) की तुलना करें
- 8. समानता एल्गोरिदम की तुलना करें
- 9. ऑक्टवे/MATLAB: समानता के लिए structs की तुलना कैसे करें?
- 10. जेएसएफ वैलिडेटर समानता के लिए स्ट्रिंग्स की तुलना
- 11. समानता के लिए स्कैला फ़ंक्शन मानों की तुलना कैसे करें
- 12. समानता के लिए XmlDocument की तुलना करना (सामग्री के अनुसार)
- 13. हैशसेट समानता के तत्वों की तुलना कैसे करता है?
- 14. समानता के लिए समान लेकिन अनियंत्रित जेनेरिक प्रकार के दो तत्वों की तुलना कैसे करें?
- 15. मैं समानता के लिए वाक्यांशों की तुलना कैसे करूं?
- 16. समानता के लिए आईईईई फ्लोट और युगल की तुलना
- 17. समानता के लिए सरणियों की तुलना करें, तत्वों
- 18. दो संख्याओं के बीच समानता
- 19. शून्य के लिए दो ऑब्जेक्ट्स की तुलना करें
- 20. नवीनतम गो साप्ताहिक में पॉइंटर समानता के लिए मैं दो कार्यों की तुलना कैसे करूं?
- 21. nltk.corpus.wordnet का समानता फ़ंक्शन दो शब्दों की समानता खोजने के लिए उपयुक्त है?
- 22. दो ऑडियो अनुक्रमों के बीच अवधारणात्मक समानता
- 23. दो छवियों की तुलना करें, और%
- 24. दो वस्तुओं की तुलना।
- 25. दो Arrays की तुलना
- 26. की तुलना दो ArrayList
- 27. दो ऑब्जेक्ट्स की तुलना
- 28. दो सीजीआरईटी की तुलना
- 29. अधिक महंगा, तुलना या असाइनमेंट क्या है?
- 30. रूबी दो स्ट्रिंग समानता प्रतिशत
क्या आपके पास सेट सदस्यता की जांच करने का एक प्रभावी तरीका है (उदाहरण के लिए वे हैशटेबल्स द्वारा समर्थित हैं)? – Thilo
सी ++ मानक के शब्दों को समझने और समझने में स्पष्ट, सीधा, आसान: "दो unordered कंटेनर' ए' और 'बी' बराबर तुलना करें यदि' a.size() == b.size() 'और प्रत्येक के लिए 'a.equal_range (Ea1)' से प्राप्त समकक्ष-कुंजी समूह '[Ea1, Ea2)' 'b.equal_range (Ea1) 'से प्राप्त समकक्ष-कुंजी समूह' [Eb1, Eb2)' मौजूद है, जैसे कि ' दूरी (ईए 1, ईए 2) == दूरी (ईबी 1, ईबी 2) 'और' is_permutation (ईए 1, ईए 2, ईबी 1) '' सत्य 'देता है। 'unordered_set' के लिए ...' ऑपरेटर == 'की जटिलता ... है औसत मामले में 'एन' के अनुपात और सबसे खराब मामले में' N^2' के लिए आनुपातिक, जहां 'एन'' a.size() 'है। –