DEV//UNIT
← АлгоритмыReal-world Development

Фильтр Блума

Битовая карта отвечает «точно нет» или «возможно да» — за биты вместо гигабайтов.

время O(k) хешейпамять O(биты)уровень: средний
Что происходит сейчас0/0
Нажмите Play, чтобы запустить сценарий
TypeScript — активная строка подсвечена шагом
1class BloomFilter {
2 private bits: Uint8Array
3
4 constructor(private size: number, private hashCount: number) {
5 this.bits = new Uint8Array(size)
6 }
7
8 add(item: string): void {
9 for (const h of this.hashes(item)) this.bits[h] = 1
10 }
11
12 mightContain(item: string): boolean {
13 return this.hashes(item).every((h) => this.bits[h] === 1)
14 }
15
16 // «точно нет» надёжно; «может быть» — с вероятностью ложного срабатывания
17 private *hashes(item: string): Generator<number> {
18 let h = 0
19 for (const ch of item) h = (h * 31 + ch.charCodeAt(0)) >>> 0
20 for (let i = 0; i < this.hashCount; i++) {
21 h = (h * 31 + i) >>> 0
22 yield h % this.size
23 }
24 }
25}

Проблема

Битовая карта отвечает «точно нет» или «возможно да» — за биты вместо гигабайтов.

Что вы видите

Каждый ключ зажигает несколько битов; нулевой бит при проверке = точное «нет».

Как это работает

Вероятностная структура: k хешей на ключ, ложные «да» возможны, ложных «нет» не бывает. При ~10 битах на элемент и k≈7 ошибка ~1%. На порядки меньше памяти, чем хеш-таблица.

Пошаговый разбор

  1. 01

    Добавление

    k хешей зажигают k бит.

  2. 02

    Проверка

    Все биты горят — «возможно».

  3. 03

    Гарантия

    Нулевой бит = «точно нет».

Complexity и ограничения

time
O(k) хешей
space
O(биты)

Сложность см. в шапке страницы.

Edge cases

  • Пустой вход

    Корректная тривиальная обработка.

  • Вырожденный случай

    Минимум работы — сразу ответ.

Где встречается в реальности

Cassandra/HBase

Проверка ключа в SSTable до обращения к диску.

Chrome

Safe Browsing-списки в фильтрах.

Кеши

Отсмотр до дорогого запроса.

Связанные алгоритмы

Shorts

«Проверить миллион ключей за килобайты»

Тот же сценарий StepSequence в вертикальной композиции — с safe zones и записью WebM ниже на странице.

Shorts 9:16

Вертикальная композиция строится той же последовательностью шагов, что и страница: safe zones отмечены пунктиром (там живёт UI платформ), биты сценария подсвечиваются по прогрессу. Кнопка записи сохраняет WebM — детерминированная StepSequence даёт воспроизводимый ролик без монтажа.

Проверить миллион ключей за килобайты
Нажмите Play
Бит 1/6 · 0–2 с
Hook
script-setup.ru/algorithms/bloom-filter