فیلتر بلوم به پرسشِ عضویت، پاسخی یکطرفه میدهد: در قراردادِ بدون حذف، پاسخِ منفی یعنی عضو درج نشده؛ پاسخِ مثبت فقط «ممکن است» است. اگر بر پایهٔ این پاسخ، رکورد تازه را حذف کنیم یا کار مهمی را انجامشده بدانیم، مثبت کاذب به خطای تصمیم تبدیل میشود. این تمرین bitset واقعی و مراجعهٔ دقیقِ بعد از پاسخ مثبت را روی دادههای ساختگی نشان میدهد.
پنج شناسه در شانزده بیت
همهٔ ۱۶ بیت ابتدا صفرند. شناسههای item-0، item-1، item-2، item-3 و item-5 را درج میکنیم. برای هر شناسه، دو SHA-256 با پیشوند بایتیِ صفر و یک حساب میشود؛ باقیماندهٔ عددِ حاصل بر۱۶، شمارهٔ بیت است. این نگاشتِ کوچک، قرارداد آموزشی ماست و استقلال دو هش یا نرخ نظری مقالهٔ اصلی را برایش تضمین نمیکنیم.
برای نمونه، item-1 به بیتهای۳و۵ و item-5 به۳و۱۲ میروند. درج، فقط بیتها را یک میکند و هیچ بیت قبلی را صفر نمیکند. item-2 در هر دو نگاشت به۸ میرسد؛ برخوردِ درون یک کلید هم در این مثال مجاز است. جدول JSON شمارهها و وضعیتِ قبل و بعدِ هر درج را نگه میدارد.
پرسوجو چه چیزی میبیند؟
همان دو نگاشت را برای ورودی تازه اجرا میکنیم. اگر یکی از بیتهای لازم صفر باشد، این شناسه با همین قرارداد درج نشده است؛ اگر هر دو یک باشند، علت میتواند درجِ خودش یا اثر شناسههای دیگر باشد. کد هر پنج عضوِ درجشده را بررسی میکند و پاسخ همه مثبت است؛ این مشاهده مربوط به حالتِ append-only و همین هشهاست.
سپس چهل شناسهٔ other-0 تا other-39 را با مجموعهٔ دقیقِ پنجعضوی مقایسه میکنیم. در اجرای همین fixture،۱۰ پاسخِ مثبت کاذب داریم. این کسر۱۰از۴۰ اندازهگیریِ همین جهان کوچک است؛ نرخ عمومی Bloom Filter، کیفیت سرویس یا احتمال خطای همهٔ دادهها نیست.
یک مثبت کاذب را تا تصمیم دنبال کنیم
other-2 به بیتهای۳و۱۲ میرود، دقیقاً همان دو بیتِ item-5. فیلتر پاسخ مثبت میدهد، ولی lookup در set مستقل، نبودِ other-2 را نشان میدهد. مسیر درستِ این نمونه آن است که پاسخِ maybe ما را به بررسی دقیق بفرستد؛ نباید آن را معادل «قبلاً ثبت شده» بگیریم.
set مرجع در فایل برای oracle و توضیح نگه داشته شده است. اگر آن را در سامانهٔ واقعی نیز نگه داریم، هزینهٔ آن جداست؛ نباید حافظهٔ همین آزمایش را فقط۱۶بیت معرفی کنیم. SHA-256 هم در این استفاده، داده را ناشناس یا محرمانه نمیکند.
چرا حذف ساده خطر دارد؟
کد عمداً بیتهای۳و۵ِ item-1 را صفر میکند. در نتیجه item-5 که هنوز در مجموعهٔ مرجع حاضر است، پاسخ منفی میگیرد؛ بیت۳ مشترک بود. این شاهدِ واقعیِ منفی کاذب پس از حذفِ نادرست است. قاعدهٔ «منفی قطعی» را به فیلترِ دستکاریشده، هشِ عوضشده یا نسخهٔ ناسازگار تعمیم ندهید.
رشتهٔ خالی، ورودی بولین و نامِ بیش از۶۴نویسه در این فایل رد میشوند. اینها سقف و قرارداد همین تمریناند، نه محدودیت ذاتی همهٔ فیلترها. Counting Bloom Filter، حذفِ درست، همزمانی و ساختار توزیعشده در این کد اجرا نشدهاند.
این ابزار جای کدام قرارداد نیست؟
MinHash شباهت مجموعهها را تخمین میزند و هش ویژگی نمایش ورودی میسازد؛ اینجا فقط عضویتِ تقریبی مطرح است. برای جلوگیری از تکرارِ اثر حساس، قرارداد idempotency و ثبت دقیق همچنان لازماند؛ Bloom بهتنهایی اجرای اتمی یا exactly-once ایجاد نمیکند.
کد و JSON، همهٔ درجها، چهل پاسخ و خطای حذف را بازتولید میکنند. برای ادامهٔ آموزش به مبانی هوش مصنوعی بروید. این نمونه اعلامِ وجودِ فیلتر بلوم یا حذفِ خودکار رکورد در خدمات اپرا نیست.
فایل تمرین و منبع
کد مستقلِ تمرین و کنترلها؛ Python · ورودیها و تمام خروجی واقعیِ همین تمرین؛ JSON
منابع در 2026-11-04 خوانده شدند؛ این تاریخ، تاریخ انتشار منبع نیست. مثالها و فایلهای این راهنما آموزشی و ساختهٔ تحریریهاند.