Фильтр Блума — различия между версиями
(→Описание структуры данных) |
Megasoch (обсуждение | вклад) м (переименовал «Фильтр Блюма» в «Фильтр Блума») |
(нет различий)
|
Версия 06:38, 15 июня 2011
Фильтр Блума — это вероятностная структура данных, придуманная Бёртоном Блумом в 1970 году, позволяющая компактно хранить множество элементов и проверять принадлежность заданного элемента к множеству. При этом существует возможность получить ложноположительное срабатывание(элемента в множестве нет, но структура данных сообщает, что он есть), но не ложноотрицательное.
Фильтр Блума может использовать любой объём памяти, заранее заданный пользователем, причем чем он больше, тем меньше вероятность ложного срабатывания. Поддерживается операция добавления новых элементов в множество, но не удаления существующих (если только не используется модификация со счётчиками). С увеличением размера хранимого множества повышается вероятность ложного срабатывания.
Описание структуры данных
Фильтр Блума представляет собой битовый массив из
бит. Изначально, когда структура данных хранит пустое множество, все бит обнулены. Далее определяются независимых хеш-функций , …, , отображающих каждый элемент в одну из позиций битового массива достаточно равномерным образом.Для добавления элемента
необходимо записать единицы на каждую из позиций , …, битового массива.Чтобы проверить что элемент
принадлежит множеству хранимых элементов, необходимо проверить состояние битов , …, . Если хотя бы один из них равен нулю, элемент не принадлежит множеству. Если все они равны единице, то структура данных сообщает, что принадлежит множеству. При этом может возникнуть две ситуации: либо элемент действительно принадлежит к множеству, либо все эти биты оказались установлены по случайности при добавлении других элементов, что и является источником ложных срабатываний в этой структуре данных.