मुझे समानता के लिए डेटा के बड़े हिस्से की तुलना करने की आवश्यकता है, और मुझे प्रति सेकंड, तेज़ की तुलना करने की आवश्यकता है। प्रत्येक वस्तु को एक ही आकार के लिए गारंटी दी जाती है, और यह संभव है/संभावना है कि वे केवल थोड़ा अलग हो (अज्ञात पदों में)।क्या यह पाइथन के अंतर्निर्मित हैश फ़ंक्शन का उचित उपयोग है?
मैंने नीचे इंटरैक्टिव सत्र से देखा है, ==
ऑपरेटर का उपयोग करके बाइट स्ट्रिंग्स धीमे हो सकते हैं यदि अंतर स्ट्रिंग के अंत की ओर हैं, और शुरुआत के दौरान कोई अंतर होने पर यह बहुत तेज़ हो सकता है।
मैंने सोचा कि कुछ प्रकार के हैश का उपयोग करके चीजों को गति देने का कोई तरीका हो सकता है, निश्चित रूप से एमडी 5 हैश की गणना करना और तुलना करना एक उचित सनकी धीमा है, लेकिन पाइथन की इनबिल्ट हैश चीजों को काफी तेज़ी से लगती है।
हालांकि, मुझे इस हैश के कार्यान्वयन विवरण के बारे में कोई जानकारी नहीं है, क्या यह वास्तव में हैश की तरह है कि मैं आरामदायक हो सकता हूं कि hash(a) == hash(b)
तब a == b
बहुत संभावना है? मैं कुछ गलत परिणाम के लिए खुश हूँ, तो एक हैश टकराव (an array of 200 PS3s several hours to make a collision की आवश्यकता होगी, के अर्थ में दुर्लभ) यथोचित दुर्लभ है
In [1]: import hashlib
In [2]: with open('/dev/urandom') as f:
...: spam = f.read(2**20 - 1)
...:
In [3]: spamA = spam + 'A'
In [4]: Aspam = 'A' + spam
In [5]: spamB = spam + 'B'
In [6]: timeit spamA == spamB
1000 loops, best of 3: 1.59 ms per loop
In [7]: timeit spamA == Aspam
10000000 loops, best of 3: 66.4 ns per loop
In [8]: timeit hashlib.md5(spamA) == hashlib.md5(spamB)
100 loops, best of 3: 4.42 ms per loop
In [9]: timeit hashlib.md5(spamA) == hashlib.md5(Aspam)
100 loops, best of 3: 4.39 ms per loop
In [10]: timeit hash(spamA) == hash(spamB)
10000000 loops, best of 3: 157 ns per loop
In [11]: timeit hash(spamA) == hash(Aspam)
10000000 loops, best of 3: 160 ns per loop
'हैश' फ़ंक्शन आर्किटेक्चर निर्भर है – JBernardo