شعار زيفيرنت

المرشحات في بلوم

التاريخ:

إذا كنت من محبي نظرية المجموعات، فقد توافق على أن هناك مجموعتين من الأشخاص الذين يكتبون برامج الكمبيوتر: أولئك الذين يعرفون ما هو مرشح بلوم وأولئك الذين لا يعرفون. كيف يمكنك إجراء اختبار فعال لمعرفة ما إذا كان شخص ما ينتمي إلى مجموعة أو أخرى؟ حسنًا، يمكنك ذلك استخدم مرشح بلوم. يأخذنا [SamWho] عبر الأمر برمته بعبارات عامة يمكنك تطبيقها في أي موقف.

يقوم مرشح Bloom بإجراء مقايضة لسرعته. إنه يخضع لإيجابيات كاذبة ولكن ليس سلبيات كاذبة. أي أنه إذا أخبرتك خوارزمية مرشح بلوم أن X ليس جزءًا من مجموعة، فهذا صحيح. ولكن إذا أخبرك بذلك، فقد يتعين عليك إجراء المزيد من التحقيق لمعرفة ما إذا كان هذا صحيحًا.

إذا لم يخبرك أن شيئًا ما موجود بالتأكيد في المجموعة، فلماذا تهتم؟ عادةً، عند استخدام مرشح Bloom، فإنك تريد تقليل البحث عبر كمية هائلة من البيانات. يتحدث المثال الموجود في المنشور عن وجود قاعدة بيانات بحجم 20 ميغابايت لعناوين URL "السيئة". تريد تحذير المستخدمين إذا قاموا بإدخال واحدة، ولكن تنزيل قاعدة البيانات هذه أمر محظور. لكن يمكن أن يصل حجم مرشح Bloom إلى 1.8 ميغابايت. ومع ذلك، سيكون هناك احتمال 1 في 1000 للحصول على نتيجة إيجابية كاذبة.

قم بزيادة حجم قاعدة البيانات إلى 3.59 ميغابايت، ويمكنك تقليل النتائج الإيجابية الخاطئة إلى واحد في المليون. من المفترض، إذا حصلت على نتيجة إيجابية، فيمكنك قبول المخاطرة بأنها كاذبة، أو يمكنك القيام بالمزيد من العمل لمزيد من البحث.

تخيل، على سبيل المثال، جهاز أو برنامج للتخزين المؤقت للويب. يتم تحميل العديد من صفحات الويب مرة واحدة ولا يتم تحميلها مرة أخرى أبدًا. إذا قمت بتخزينها جميعًا مؤقتًا، فسوف تضيع الكثير من الوقت وتدفع أشياء أخرى خارج ذاكرة التخزين المؤقت. ولكن إذا قمت باختبار عنوان URL للصفحة باستخدام مرشح Bloom، فيمكنك تحسين الأمور قليلاً. إذا كان عنوان URL موجودًا في مرشح Bloom، فمن المحتمل أنك رأيته من قبل، لذا قد ترغب في تخزينه مؤقتًا.

إذا ظهرت رسالة لم تقم بذلك، فيمكنك إضافتها إلى عامل التصفية، لذا إذا تم الوصول إليها مرة أخرى، فسيتم تخزينها مؤقتًا. بالتأكيد، في بعض الأحيان ستظهر الصفحة نتيجة إيجابية كاذبة. وماذا في ذلك؟ ستقوم فقط بتخزين الصفحة مؤقتًا في المرة الأولى، وهو ما فعلته من قبل، على أي حال. إذا حدث ذلك بنسبة 0.1% فقط من الوقت، فستظل فائزًا.

بعبارات بسيطة، يقوم مرشح Bloom بتجزئة كل عنصر باستخدام ثلاث خوارزميات مختلفة ويقوم بتعيين البتات في مصفوفة بناءً على النتيجة. لاختبار عنصر ما، يمكنك حساب نفس التجزئات ومعرفة ما إذا تم تعيين أي من البتات المقابلة على الصفر. إذا كان الأمر كذلك، فلا يمكن أن يكون العنصر موجودًا في المجموعة. بالطبع، ليس هناك ما يضمن أن جميع البتات الثلاثة التي تم ضبطها تعني أن المجموعة تحتوي على العنصر. يمكن تعيين هذه البتات الثلاثة لعناصر مختلفة.

لماذا تساعد زيادة عدد البتات؟ يجيب المنشور على ذلك وينظر إلى التحسينات الأخرى مثل عدد مختلف من وظائف التجزئة والعد.

يقوم المنشور بعمل رائع في شرح عامل التصفية، ولكن إذا كنت تريد مثالًا أكثر وضوحًا في لغة C، فقد ترغب في قراءته هذا المنصب المقبل. أو ابحث عن الكود بلغتك المفضلة. لقد تحدثنا عن التعامل مع سلسلة بايثون مع مرشحات بلوم قبل. لقد رأينا حتى اقتراحا ل اضفهم إلى حافلة النقل.

بقعة_صورة

أحدث المعلومات الاستخباراتية

بقعة_صورة