Итак, фильтры Блума довольно крутые - это наборы, которые поддерживают проверку членства без ложных отрицаний, но с небольшой вероятностью ложных срабатываний. Однако недавно я хотел «фильтр Блума», который гарантирует обратное: никаких ложных срабатываний, но потенциально ложных отрицательных.
Моя мотивация проста: учитывая огромный поток элементов для обработки (с дубликатами), мы бы хотели избежать обработки элементов, которые мы видели раньше. Обрабатывать дубликаты не повредит, это просто трата времени. Тем не менее, если бы мы пренебрегали обработкой элемента, он был бы катастрофическим. С помощью «обратного фильтра Блума» можно хранить элементы, видимые с небольшим объемом памяти, и избегать обработки дубликатов с высокой вероятностью, проверяя членство в наборе.
Тем не менее, я не могу найти ничего подобного. Самым близким, что я нашел, являются « отредактированные фильтры Блума », которые позволяют обменивать выбранные ложные срабатывания на более высокий уровень ложных отрицательных результатов. Однако я не знаю, насколько хорошо работает их структура данных, когда нужно удалить все ложные срабатывания.
Кто-нибудь видел что-нибудь подобное? :)