यदि झूठी सकारात्मक स्वीकार्य हैं, तो एक संभावित समाधान bloom filter का उपयोग करना होगा। ब्लूम फ़िल्टर हैंश टेबल के समान हैं, लेकिन बाल्टी की एक तालिका को इंडेक्स करने के लिए एक हैश मान का उपयोग करने के बजाय, यह एक बिट सरणी को इंडेक्स करने के लिए एकाधिक हैंश का उपयोग करता है। उन सूचकांक से संबंधित बिट्स सेट हैं। फिर, परीक्षण करने के लिए कि स्ट्रिंग फ़िल्टर में है या नहीं, स्ट्रिंग फिर से धोया गया है, और यदि संबंधित इंडेक्स सेट हैं, तो स्ट्रिंग फ़िल्टर में "अंदर" है।
यह तारों के बारे में कोई जानकारी संग्रहीत नहीं करता है, इसलिए यह बहुत कम स्मृति का उपयोग करता है - लेकिन यदि दो तारों के बीच टकराव होता है, तो कोई टकराव समाधान संभव नहीं होता है। इसका मतलब है कि झूठी सकारात्मक हो सकती है (क्योंकि फिल्टर में मौजूद एक स्ट्रिंग फ़िल्टर में मौजूद स्ट्रिंग के समान इंडेक्स में हैश हो सकती है)। हालांकि, कोई झूठी नकारात्मक नहीं हो सकती है; वास्तव में सेट में मौजूद कोई भी स्ट्रिंग ब्लूम फ़िल्टर में पाई जाएगी।
fewPythonimplementations हैं। अपने आप को रोल करना भी मुश्किल नहीं है; मुझे bitarray
एस का उपयोग करके एक बार एक त्वरित और गंदे खिलने वाले फ़िल्टर को कोडिंग करना याद है जो बहुत अच्छी तरह से प्रदर्शन करता है।
क्या आप कभी-कभी झूठी सकारात्मक सहन कर सकते हैं? – senderle
झूठी नकारात्मक अस्वीकार्य हैं; कभी-कभी झूठे सकारात्मक संभावित रूप से सहनशील होते हैं। –
बस उन्हें 'सेट' में संग्रहीत करें और ओएस के वर्चुअल मेमोरी मैनेजर को आवश्यकतानुसार डिस्क पर जाने दें। आप इसे 'पिकले' का उपयोग करके डिस्क पर स्पष्ट रूप से सहेज सकते हैं। डेटाबेस बनाने की जरूरत नहीं है। – martineau