---
title: Bloom Filter
localeTitle: مرشح بلوم
---
## وصف

مرشح بلوم هو هيكل البيانات الذي يشبه مجموعة. مرشح بلوم يسمح للسؤال _هل هذا البند عضو في المجموعة؟_ ليتم الرد عليها بسرعة. لن يقوم الفلتر بإرجاع _No_ إذا كان العنصر في المجموعة؛ ولكن ، قد ترجع _نعم_ إذا كان العنصر غير موجود في المجموعة. هذا هو جانب واحد لاستخدام مرشح بلوم ، هناك فرصة للنتائج الإيجابية الكاذبة عند التحقق مما إذا كان العنصر في المجموعة. الاتجاه الصعودي لاستخدام مرشح بلوم هو أن إضافة عنصر إلى المجموعة والتحقق مما إذا كان العنصر في المجموعة هو عملية [O (n)](https://guide.freecodecamp.org/algorithms/algorithm-performance) ثابتة.

## مثال

يستخدم المثال التالي مرشح Bloom لإنشاء قائمة أصدقاء. يستخدم تطبيق المثال ثلاث [وظائف التجزئة](https://guide.freecodecamp.org/miscellaneous/hash-tables-and-hashing-functions) . تقوم وظائف التجزئة بدمج سلسلة (اسم صديق) وتحسب قيمة مفردة للسلسلة بناءً على عدد البقع في مرشح Bloom.

إنشاء فلتر كصفيف من 10 مؤشرات. يشير `0` إلى عدم وجود عنصر في هذا الفهرس.

`[0,0,0,0,0,0,0,0,0,0]`

يضيف المستخدم ديفيد إلى قائمة الأصدقاء. يتم وضع السلسلة ( `'David'` ) عبر العديد من وظائف التجزئة التي ترجع `0` و `4` و `8` على التوالي. يتم استخدام القيم من وظائف التجزئة لتحديث مصفوفة المرشح في تلك المؤشرات.

يتم تحديث مؤشرات التصفية باستخدام تلك القيم المجزأة. يشير الرقم `1` إلى إضافة عنصر في هذا الفهرس.

`[1,0,0,0,1,0,0,0,1,0]`

يضيف المستخدم روزي إلى قائمة الأصدقاء. ترجع الدالات التجزئة `3` و `4` و `6` لـ `'Rosie'` . يتم تحديث مؤشرات التصفية باستخدام القيم المجزأة.

`[1,0,0,1,1,0,1,0,1,0]`

يوجد فحص إذا كان Chuck عضوًا في قائمة الأصدقاء. يتم وضع السلسلة `'Chuck'` عبر وظائف التجزئة التي ترجع إلى `1` و `3` و `6` . عندما يتم تحديد مصفوفة المرشح في تلك المؤشرات ، فإنها تُرجع `0` و `1` و `1` . نظرًا لأن أحد الفهارس لديه قيمة `0` ، فإن Chuck ليس عضوًا _بالتأكيد_ في القائمة.

يوجد شيك إذا كانت Maja عضوًا في قائمة الأصدقاء. يتم وضع السلسلة `'Maja'` عبر وظائف التجزئة ، والعائد `0` و `6` و `8` . عند تحديد مصفوفة المرشح في تلك المؤشرات ، فإنها تُرجع `1` و `1` و `1` . نظرًا لأن جميع المؤشرات الثلاثة لها قيمة `1` ، _فقد_ تكون Maja بالفعل عضوًا في القائمة. هذه نتيجة إيجابية خاطئة.

## الاعتبارات

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

## قراءة متعمقة

[متوسطة خوارزمية توصية بوست](https://blog.medium.com/what-are-bloom-filters-1ec2a50c68ff)

[ويكيبيديا على مرشحات بلوم](https://en.wikipedia.org/wiki/Bloom_filter)