
Мой bloom фильтр побил оригинальный в 200 раз
MaxLenPer 3 часа назад Мой bloom фильтр побил оригинальный в 200 раз Средний 3 мин 5.3K Алгоритмы * Базы данных * Rust * Не люблю хэш-таблицыНе люблю я хэш-таблицы. Какой бы областью я не занимался — они везде просто...
<5 — 2026'da uzaya kaç SpaceX Starship fırlatması ulaşacak?
В сфере искусственного интеллекта произошло заметное событие. MaxLenPer 3 часа назад Мой bloom фильтр побил оригинальный в 200 раз Средний 3 мин 5. 3K Алгоритмы * Базы данных * Rust * Не люблю хэш-таблицыНе люблю я хэш-таблицы. Какой бы областью я не занимался — они везде просто “достаточно хорошее” решение.
Где нужны объёмы — масштабируется линейно. Где нужна точность — даёт вероятность (высокую, но вероятность всё-таки). ЗадачаЕсть класс задач, где удобно заранее узнать включение паттерна в потоке.
Технические детали
Например, AB есть в DDDABEEE. И узнавать надо часто. Наивный подход — линейный скан на каждый запрос.
Как работает Bloom-фильтрРебята придумали Bloom-фильтр. У вас массив нулей фиксированного размера. Входная строка проходит через K хэш-функций (по сути мясорубку), и по получившимся хэшам вы сыпете единицами в массив:Вставка "CAT": hash1("CAT = 3 hash2("CAT = 7 hash3("CAT = 1 Массив: 0 1 0 1 0 0 0 1 0 0 индекс: ↑ ↑ ↑ h3 h1 h2 Проверка: прогоняем запрос через те же K функций.
Если все K позиций = 1, ответ “вероятно есть”. Если хоть одна позиция = 0, ответ “точно нет”:Поиск "DOG": hash1("DOG = 3 → массив = 1 ✓ hash2("DOG = 5 → массив = 0 ✗ → ТОЧНО НЕТ Поиск "FOX": hash1("FOX = 3 → массив = 1 ✓ hash2("FOX = 7 → массив = 1 ✓ hash3("FOX = 1 → массив = 1 ✓ → ВЕРОЯТНО ЕСТЬ (но мы FOX не вставляли! ) Работает за константное время, но есть минусы:Размер массива надо подбирать эмпирическиСо временем массив захламляется единицамиFalse Positives неизбежны (чем больше данных — тем больше)Зачем K функций а не одна?
Отраслевые последствия
Одна функция ставит 1 бит. Проверка: “этот бит = 1? ” — но куча других элементов тоже его поставили.
С одной функцией FPR ≈ заполненность массива. K функций ставят K бит. Проверка: “ВСЕ K бит = 1?
” Вероятность что K случайных позиций все заняты чужими элементами = (заполненность)^K:Массив заполнен на 50%: K = 1 → FPR ≈ 50% (каждый второй запрос врёт) K = 3 → FPR ≈ 12. 5% (уже терпимо) K = 7 → FPR ≈ 0. 8% (почти идеально) K = 10 → FPR ≈ 0.
Этот прогресс даёт важные сигналы о будущем отрасли, и технологический мир внимательно наблюдает.




