TGViewer
Cross Join - канал о разработке Cross Join - канал о разработке @crossjoin · 3.81K subscribers
Post #558 2.91K
Bloom filter

Если нужно быстро и с малым количеством памяти проверить, есть ли элемент в каком-то списке (например, емейл в блеклисте), можно использовать Bloom filter. Этот алгоритм умеет выдавать два ответа: "этого элемента точно нет" и "этот элемент возможно есть".

Как он работает:

Выделяется массив бит длиной m (чем больше m, тем меньше ложноположительных срабатываний).

Далее, по каждому элементу списка пробегаемся и вычисляем несколько хеш функций (разных, и желательно быстро работающих). Результат хеш-функции - это некое число. Если взять остаток от деления на m, то получим позицию бита.

Короче, для каждой хеш функции выставляем в итоге бит в 1.

И так каждый элемент списка: выставит свои биты в 1, некоторые будут совпадать с другими элементами.

Проверка на вхождение элемента в список

точно также, вычисляем теми же хеш фунциями позиции битов и смотрим, что там, в этих позициях.

Если хотя бы один бит равен 0, то этот элемент точно отсутствует в списке. Если все 1, то возможно присутствует.

Элементарно и эффективно.

Хеш-функций нужно несколько, чтобы уменьшить вероятность ложноположительных ситуаций.

Количество требуемой памяти и оптимальное количество хеш-функций вычисляется по простым формулам (можно найти в Википедии), исходя из требуемой вероятности ложно-положительного срабатывания и количества элементов в списке.

Особенности фильтра:

Вы сами задаёте количество памяти исходя из требуемого качества.

Работает за константное время O(1)

Из него невозможно удалить значения. Лишь пересобрать полностью заново.

Можно разные фильтры объединять в один простым побитовым ИЛИ

🫥 Cross Join - канал о разработке
  • 👍 14
  • ❤ 8
  • 🔥 6
  • ❤‍🔥 1
More from @crossjoin
  1. Sep 28, 2026Слышал недавно в каком-то подкасте мысль, что Haskell плохо подходит для вайбкодинга прост…
  2. Sep 26, 2026Антон Жиянов написал мини-книгу по Go-concurrency. Это что-то вроде плотного конспекта с и…
  3. Sep 22, 2026photo post
  4. Sep 14, 2026Поможем Руслану собрать фидбек. Проект некоммерческий 👆
  5. Sep 14, 2026AGBX (Agent Box) — небольшой open-source CLI для запуска Claude Code и Codex в изолированн…
  6. Sep 5, 2026Обалдеть, что творится. На Рейтерс вышла статья, в которой утверждается, что, помимо сканд…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →