🌸 Фільтр Блума
Імовірнісна належність до множини
Без хибнонегативних
Встановлено бітів: 0 / 64
Елемент
Параметри
Керування
Статистика
Вставлено n
0
Встановлено бітів
0 / 64
Теорія хибн.+
0.0%
Виміряно хибн.+
Журнал
Довідка та теорія

Фільтр Блума — це компактна імовірнісна структура, що відповідає на одне питання: «чи є цей елемент у множині?» Він використовує масив із m бітів і k геш-функцій, не зберігаючи жодного елемента.

Додавання елемента

Гешуємо елемент усіма k функціями, щоб отримати k позицій у [0, m), і встановлюємо ці біти в 1. Біти ніколи не скидаються.

Запит елемента

  • Якщо будь-який із k бітів дорівнює 0 → точно немає в множині.
  • Якщо усі k бітів дорівнюють 1 → можливо є в множині.

Оскільки встановлені біти ніколи не скидаються, справжній член завжди проходить — тож хибнонегативних немає. Але через колізії не-член може здаватися наявним: це хибнопозитивна відповідь.

Частота помилок

Після вставлення n елементів імовірність того, що випадковий не-член дасть усі одиниці, приблизно дорівнює (1 − e^(−kn/m))^k. Доданок e^(−kn/m) оцінює частку бітів, що досі є 0.

Налаштування k та m

Похибка мінімізується при k = (m/n)·ln 2, а цільова частота p потребує m = −n·ln p / (ln 2)² бітів — близько 9,6 біта на елемент для 1%.

Про фільтр Блума

Автор: Команда MySimulator · Редакційна перевірка: Редакція MySimulator

Оновлено: 11 липня 2026 р.

Фільтр Блума — компактна імовірнісна структура даних, що відповідає на запитання «чи є елемент у наборі?» з нульовим шансом хибно-від'ємної відповіді, але допускає хибно-позитивні відповіді з контрольованою ймовірністю. Замість зберігання самих елементів структура підтримує масив бітів розміром m і застосовує k незалежних хеш-функцій: при додаванні елемента всі k позицій встановлюються в 1; при перевірці — якщо хоча б одна позиція дорівнює 0, елемента точно немає в наборі.

Симулятор дозволяє регулювати розмір масиву m, кількість хеш-функцій k і кількість вставлених елементів n. Спостерігайте, як ймовірність хибно-позитивного результату (1 − e^(−kn/m))^k змінюється в реальному часі разом з колірним заповненням масиву бітів. Оптимальне значення k = (m/n) ln 2 мінімізує хибно-позитивні результати для заданого відношення m/n.

Поширені запитання

Чому фільтр Блума ніколи не дає хибнонегативних відповідей?

При вставленні елемента всі k його гешованих бітових позицій встановлюються в 1 і ніколи не скидаються назад. Тому якщо перевіряти справді вставлений елемент, усі k бітів завжди виявляться рівними 1, і фільтр коректно відповість «можливо в множині». Хибнонегативна відповідь потребувала б, щоб біт повернувся до 0, а такого ніколи не відбувається.

Яка формула ймовірності хибнопозитивної відповіді?

Після вставлення n елементів у бітовий масив розміром m із k геш-функціями частка бітів, що досі дорівнюють 0, приблизно дорівнює e^(-kn/m), тож імовірність того, що всі k позицій для не-члена виявляться одиницями, дорівнює (1 - e^(-kn/m))^k. Наприклад, при m = 64, k = 3 і n = 10 частота хибнопозитивних становить приблизно 5%.

Як обрати оптимальну кількість геш-функцій k?

Значення k = (m/n) × ln 2 мінімізує частоту хибнопозитивних відповідей для заданих m і n. Замало геш-функцій залишає багато бітів незаповненими і знижує розрізнення; забагато — швидко заповнює масив і збільшує кількість колізій. Для цільової частоти помилок 1% оптимальний розмір масиву становить приблизно 9,6 біта на кожен вставлений елемент.

Чому неможливо видаляти елементи зі стандартного фільтра Блума?

Видалення елемента вимагало б скидання його k бітових позицій, але ці самі біти могли бути встановлені й іншими вставленими елементами, тож їх скидання непомітно спричинило б хибнонегативні відповіді для тих елементів. Лічильниковий фільтр Блума (Counting Bloom Filter) замінює кожен біт невеликим лічильником, що збільшується при вставленні й зменшується при видаленні, дозволяючи безпечне видалення ціною додаткової пам'яті.