🌸 Фільтр Блума
Імовірнісна належність до множини
Без хибнонегативних
Встановлено бітів: 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%.

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

Що таке фільтр Блума?

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

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

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

Що спричиняє хибнопозитивні відповіді у фільтрі Блума?

Хибнопозитивна відповідь виникає, коли всі k бітів для запитаного елемента вже встановлені в 1 іншими вставленими елементами, хоча сам елемент не додавали. Імовірність цього зростає в міру заповнення фільтра.

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

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

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

Оптимальна кількість дорівнює k = (m/n) · ln 2, що мінімізує частоту хибнопозитивних. Замало гешів — фільтр погано розрізняє; забагато — масив швидко заповнюється.

Якого розміру m має бути бітовий масив?

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

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

Зі стандартного фільтра Блума — ні, бо скидання бітів могло б зачепити інші елементи. Лічильниковий фільтр Блума використовує невеликі лічильники замість одиничних бітів, що дозволяє видалення.

Де фільтри Блума застосовують на практиці?

Бази даних на кшталт Cassandra та HBase використовують їх, щоб уникати читання з диска для відсутніх ключів, браузери — для перевірки шкідливих URL, а CDN та кеші — щоб не кешувати «одноразові» запити.

Як реальні реалізації отримують k незалежних гешів?

Замість k окремих геш-функцій подвійне гешування поєднує два базові геші як h_i(x) = h1(x) + i · h2(x) mod m, що поводиться близько до k незалежних гешів для потреб фільтра.

У чому різниця між виміряною та теоретичною похибкою?

Теоретична частота (1 − e^(−kn/m))^k передбачає ідеалізоване рівномірне гешування. Виміряна частота тут рахує реальні хибнопозитивні відповіді на випадкових тестових запитах, тому вона коливається довкола теорії.