Jump to content

Фильтр Блума

Фильтр Блума — это компактная вероятностная структура данных , задуманная Бертоном Ховардом Блумом в 1970 году и используемая для проверки того, является ли элемент членом множества . Ложноположительные совпадения возможны, а ложноотрицательные — нет. Другими словами, запрос возвращает либо «возможно, в наборе», либо «определенно не в наборе». Элементы можно добавлять в набор, но не удалять (хотя это можно решить с помощью варианта подсчетного фильтра Блума ); чем больше элементов добавлено, тем выше вероятность ложных срабатываний.

«обычные» методы безошибочного хеширования Блум предложил эту технику для приложений, в которых объем исходных данных потребовал бы непрактично большого объема памяти, если бы применялись . Он привел пример алгоритма расстановки переносов для словаря из 500 000 слов, из которых 90% следуют простым правилам расстановки переносов, но оставшиеся 10% требуют дорогостоящего доступа к диску для получения определенных шаблонов расстановки переносов. При наличии достаточного количества основной памяти можно использовать безошибочный хеш для устранения всех ненужных обращений к диску; с другой стороны, при ограниченной основной памяти метод Блума использует меньшую область хеширования, но при этом исключает большинство ненужных обращений. Например, хеш-область, составляющая всего 15 % от размера, необходимого для идеального безошибочного хэша, тем не менее исключает 85 % обращений к диску. [1]

менее 10 бит на элемент, независимо от размера или количества элементов в наборе. В более общем смысле, для вероятности ложного срабатывания 1% требуется [2]

Описание алгоритма [ править ]

Пример фильтра Блума, представляющего набор { x , y , z } . Цветные стрелки показывают позиции в битовом массиве, которым сопоставлен каждый элемент набора. Элемент w отсутствует в наборе { x , y , z } , поскольку он хешируется до одной позиции битового массива, содержащей 0. Для этого рисунка m = 18 и k = 3 .

Пустой фильтр Блума представляет собой битовый массив из m бит, все из которых установлены в 0. Он оснащен k различными хеш-функциями , которые сопоставляют элементы набора в одну из m возможных позиций массива. Чтобы быть оптимальными, хеш-функции должны быть равномерно распределены и независимы . Обычно k представляет собой небольшую константу, которая зависит от желаемой частоты ложных ошибок ε , а m пропорциональна k и количеству добавляемых элементов.

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

Чтобы проверить , находится ли элемент в наборе, передайте его каждой из k хэш-функций, чтобы получить k позиций массива. Если какой-либо из битов в этих позициях равен 0, элемент определенно отсутствует в наборе; если бы это было так, то при вставке все биты были бы установлены в 1. Если все равны 1, то либо элемент находится в наборе, либо биты случайно были установлены в 1 во время вставки других элементов, что приводит к ложному срабатыванию . В простом фильтре Блума нет возможности различить эти два случая, но эту проблему можно решить более продвинутыми методами.

Требование разработки k различных независимых хеш-функций может быть непомерно трудным для больших k . Для хорошей хэш-функции с широким выходным значением корреляция между различными битовыми полями такого хеша должна быть минимальной, если она вообще должна быть, поэтому этот тип хеш-функции можно использовать для генерации нескольких «разных» хэш-функций путем разделения ее выходных данных на несколько битов. поля. В качестве альтернативы можно передать k различных начальных значений (например, 0, 1, ..., k - 1) в хеш-функцию, которая принимает начальное значение; или добавьте (или добавьте) эти значения в ключ. Для больших m и/или k независимость хэш-функций может быть ослаблена с незначительным увеличением частоты ложных срабатываний. [3] (В частности, Dillinger & Manolios (2004b) показывают эффективность получения индексов k с использованием улучшенного двойного хеширования. и тройное хеширование — варианты двойного хеширования , которые по сути представляют собой простые генераторы случайных чисел, в которые затравлены два или три хеш-значения.)

Удаление элемента из этого простого фильтра Блума невозможно, поскольку невозможно определить, какой из k битов, которым он соответствует, следует очистить. Хотя установки любого из этих k битов в ноль достаточно, чтобы удалить элемент, это также приведет к удалению любых других элементов, которые случайно отображаются на этот бит. Поскольку простой алгоритм не дает возможности определить, были ли добавлены какие-либо другие элементы, влияющие на биты удаляемого элемента, очистка любого из битов приведет к возможности ложноотрицательных результатов.

Одноразовое удаление элемента из фильтра Блума можно смоделировать, используя второй фильтр Блума, содержащий удаленные элементы. Однако ложноположительные результаты во втором фильтре становятся ложноотрицательными в составном фильтре, что может быть нежелательно. При таком подходе повторное добавление ранее удаленного элемента невозможно, так как его пришлось бы удалить из фильтра «удалено».

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

и Преимущества времени пространства

Фильтр Блума, используемый для ускорения ответов в системе хранения значений ключей. Значения хранятся на диске, который имеет медленное время доступа. Решения по фильтру Блума принимаются намного быстрее. Однако некоторые ненужные обращения к диску выполняются, когда фильтр сообщает о положительном результате (чтобы отсеять ложные срабатывания). Общая скорость ответа с фильтром Блума выше, чем без него. Однако использование фильтра Блума для этой цели увеличивает использование памяти. [ нужна ссылка ] .

Несмотря на риск ложных срабатываний, фильтры Блума имеют существенное преимущество в пространстве перед другими структурами данных для представления наборов, такими как самобалансирующиеся двоичные деревья поиска , попытки , хеш-таблицы или простые массивы или связанные списки записей. Большинство из них требуют хранения, по крайней мере, самих элементов данных, для чего может потребоваться от небольшого количества битов для небольших целых чисел до произвольного количества битов, например, для строк ( попытки являются исключением, поскольку они могут совместно использовать хранилище между элементами с одинаковыми префиксами). Однако фильтры Блума вообще не хранят элементы данных, и для фактического хранения необходимо предусмотреть отдельное решение. Связанные структуры требуют дополнительных затрат линейного пространства для указателей. Фильтр Блума с ошибкой 1% и оптимальным значением k , напротив, требует всего около 9,6 бит на элемент независимо от размера элементов. Это преимущество происходит частично из-за его компактности, унаследованной от массивов, а частично из-за его вероятностного характера. Уровень ложноположительных результатов в 1% можно уменьшить в десять раз, добавив всего около 4,8 бита на элемент.

Однако, если количество потенциальных значений невелико и многие из них могут находиться в наборе, фильтр Блума легко превосходит детерминированный битовый массив , которому требуется только один бит для каждого потенциального элемента. Хэш-таблицы получают преимущество в пространстве и времени, если они начинают игнорировать коллизии и сохраняют только то, содержит ли каждый сегмент запись; в этом случае они фактически стали фильтрами Блума с k = 1 . [4]

Фильтры Блума также обладают необычным свойством: время, необходимое для добавления элементов или для проверки наличия элемента в наборе, является фиксированной константой O( k ) , полностью независимой от количества элементов, уже находящихся в наборе. Ни одна другая структура данных с постоянным пространством не обладает этим свойством, но среднее время доступа к разреженным хэш-таблицам на практике может сделать их быстрее, чем некоторые фильтры Блума. Однако в аппаратной реализации фильтр Блума превосходен, поскольку его k поисков независимы и могут быть распараллелены.

Чтобы понять его пространственную эффективность, полезно сравнить общий фильтр Блума с его частным случаем, когда k = 1 . Если k = 1 , то для того, чтобы уровень ложных срабатываний был достаточно низким, должна быть установлена ​​небольшая часть битов, а это означает, что массив должен быть очень большим и содержать длинные серии нулей. Информативность . массива относительно его размера низкая Обобщенный фильтр Блума ( k больше 1) позволяет установить гораздо больше битов, сохраняя при этом низкий уровень ложных срабатываний; если параметры ( k и m ) выбраны правильно, будет установлено около половины битов, [5] и они будут явно случайными, сводя к минимуму избыточность и максимизируя информационное содержание.

Вероятность ложных срабатываний [ править ]

Ложноположительная вероятность как функция количества элементов в фильтре и размере фильтра . Оптимальное количество хэш-функций было предположено.

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

Если k — количество хеш-функций, и каждая из них не имеет значимой корреляции между собой, то вероятность того, что бит не установлен в 1 ни одной из хэш-функций, равна

Мы можем использовать известное тождество для e −1

заключить, что при m больших

Если мы вставили n элементов, вероятность того, что определенный бит все еще равен 0, равна

вероятность того, что это 1, следовательно,

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

Это не совсем правильно, поскольку предполагает независимость вероятностей каждого устанавливаемого бита. Однако, если предположить, что это близкое приближение, мы получим, что вероятность ложных срабатываний уменьшается по мере увеличения m (количества битов в массиве) и увеличивается по мере увеличения n (количества вставленных элементов).

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

где {фигурные скобки} обозначают числа Стирлинга второго рода . [6]

Альтернативный анализ, приходящий к тому же приближению без предположения независимости, дан Митценмахером и Упфалем. [7] После того, как все n элементов были добавлены в фильтр Блума, пусть q будет долей m бит, которым присвоено значение 0. (То есть количество битов, все еще установленных в 0, равно qm .) Затем при проверке принадлежности к элемента нет в наборе, для позиции массива, заданной любой из k хеш-функций, вероятность того, что бит будет установлен в 1, равна . Таким образом, вероятность того, что все k хэш-функций обнаружат, что их бит установлен в 1, равна . Кроме того, ожидаемое значение q — это вероятность того, что данная позиция массива останется нетронутой каждой из k хеш-функций для каждого из n элементов, что (как указано выше)

.

Без предположения независимости можно доказать, что q очень сильно сконцентрировано вокруг своего ожидаемого значения. В частности, на основе неравенства Азумы–Хеффдинга они доказывают, что [8]

Поэтому мы можем сказать, что точная вероятность ложных срабатываний равна

как раньше.

Оптимальное количество хэш-функций [ править ]

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

Требуемое количество битов m с учетом n (количества вставленных элементов) и желаемой ложноположительной вероятности ε оптимальное значение k (при условии, что используется ) можно вычислить, подставив оптимальное значение k в выражение вероятности, приведенное выше. :

который можно упростить до:

Это приводит к:

Таким образом, оптимальное количество бит на элемент равно

с соответствующим количеством хеш-функций k (без учета целочисленности):

Это означает, что для заданной вероятности ложного положительного результата ε длина фильтра Блума m пропорциональна количеству фильтруемых элементов n , а необходимое количество хеш-функций зависит только от целевой вероятности ложного положительного результата ε . [9]

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

Гоэль и Гупта, [10] однако дайте строгую верхнюю оценку, которая не делает никаких приближений и не требует никаких предположений. Они показывают, что вероятность ложного положительного результата для конечного фильтра Блума с m битами ( ), n элементов и k хеш-функций не более

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

Аппроксимация количества элементов в фильтре Блума [ править ]

Количество элементов в фильтре Блума можно приблизительно определить по следующей формуле:

где — оценка количества элементов в фильтре, m — длина (размер) фильтра, k — количество хеш-функций, а X — количество бит, установленных в единицу. [11]

Объединение и пересечение множеств [ править ]

Фильтры Блума — это способ компактного представления набора элементов. Обычно пытаются вычислить размер пересечения или объединения двух наборов. Фильтры Блума можно использовать для аппроксимации размера пересечения и объединения двух наборов. Для двух фильтров Блума длины m их счетчики соответственно можно оценить как

и

Размер их союза можно оценить как

где — это количество битов, установленных в один в любом из двух фильтров Блума. Наконец, пересечение можно оценить как

используя три формулы вместе. [11]

Свойства [ править ]

  • В отличие от стандартной хеш-таблицы, использующей открытую адресацию для разрешения коллизий , фильтр Блума фиксированного размера может представлять набор с сколь угодно большим количеством элементов; добавление элемента никогда не терпит неудачу из-за «заполнения» структуры данных. Однако частота ложных срабатываний постоянно увеличивается по мере добавления элементов до тех пор, пока все биты в фильтре не будут установлены в 1, после чего все запросы дадут положительный результат. При хешировании с открытой адресацией ложные срабатывания никогда не возникают, но производительность постоянно снижается, пока не приближается к линейному поиску.
  • Объединение и пересечение фильтров Блума с одинаковым размером и набором хеш-функций могут быть реализованы с помощью побитовых операций ИЛИ и И соответственно. Операция объединения фильтров Блума выполняется без потерь в том смысле, что результирующий фильтр Блума аналогичен фильтру Блума, созданному с нуля с использованием объединения двух наборов. Операция пересечения обладает более слабым свойством: вероятность ложного положительного результата в результирующем фильтре Блума не более чем вероятность ложного положительного результата в одном из составляющих фильтров Блума, но может быть больше, чем вероятность ложного положительного результата в фильтре Блума, созданном с нуля с использованием пересечение двух множеств.
  • Некоторые виды наложенного кода можно рассматривать как фильтр Блума, реализованный с помощью физических карт с надрезами по краям . Примером является затокодирование , изобретенное Кэлвином Мурсом в 1947 году, в котором набор категорий, связанных с фрагментом информации, представлен насечками на карте со случайным рисунком из четырех насечек для каждой категории.

Примеры [ править ]

  • Плодовые мухи используют модифицированную версию фильтров Блума для обнаружения новизны запахов с дополнительными функциями, включая сходство нового запаха с запахом ранее испытанных примеров, а также время, прошедшее с момента предыдущего ощущения того же запаха. [12]
  • Серверы компании Akamai Technologies , провайдера доставки контента , используют фильтры Блума, чтобы предотвратить сохранение «одноразовых чудес» в дисковых кэшах. «Чудеса одного удара» — это веб-объекты, запрошенные пользователями только один раз, и компания Akamai обнаружила, что они применяются почти к трем четвертям их инфраструктуры кэширования. Использование фильтра Блума для обнаружения второго запроса веб-объекта и кэширования этого объекта только при втором запросе предотвращает попадание чудес с одним попаданием в дисковый кэш, что значительно снижает рабочую нагрузку на диск и увеличивает частоту попаданий в дисковый кэш. [13]
  • Google Bigtable , Apache HBase , Apache Cassandra , ScyllaDB и PostgreSQL [14] используйте фильтры Блума, чтобы сократить объем поиска на диске несуществующих строк или столбцов. Отказ от дорогостоящего поиска на диске значительно повышает производительность операции запроса к базе данных. [15]
  • Веб-браузер Google Chrome ранее использовал фильтр Блума для выявления вредоносных URL-адресов. Любой URL-адрес сначала проверялся на соответствие локальному фильтру Блума, и только если фильтр Блума возвращал положительный результат, выполнялась полная проверка URL-адреса (и пользователь предупреждался, если и это тоже давало положительный результат). [16] [17]
  • Microsoft Bing (поисковая система) использует многоуровневые иерархические фильтры Блума для своего поискового индекса BitFunnel . Фильтры Блума обеспечивали меньшую стоимость, чем предыдущий индекс Bing, основанный на инвертированных файлах . [18]
  • Кэш Squid веб прокси - использует фильтры Блума для дайджестов кэша. [19]
  • Биткойн использовал фильтры Блума для ускорения синхронизации кошелька до тех пор, пока не были обнаружены уязвимости конфиденциальности, связанные с реализацией фильтров Блума. [20]
  • Система архивного хранения Venti использует фильтры Блума для обнаружения ранее сохраненных данных. [21]
  • Средство проверки модели SPIN использует фильтры Блума для отслеживания достижимого пространства состояний для больших проблем проверки. [22]
  • Платформа каскадной аналитики использует фильтры Блума для ускорения асимметричных соединений, когда один из объединяемых наборов данных значительно больше другого (в литературе по базам данных часто называется соединением Блума). [23]
  • Агент передачи почты Exim (MTA) использует фильтры Блума в своей функции ограничения скорости. [ нужна ссылка ]
  • Medium использует фильтры Блума, чтобы не рекомендовать статьи, которые пользователь ранее читал. [24] [ источник, созданный пользователем? ]
  • Ethereum использует фильтры Блума для быстрого поиска журналов в блокчейне Ethereum.
  • Grafana Tempo использует фильтры Блума для повышения производительности запросов за счет сохранения фильтров Блума для каждого внутреннего блока. Доступ к ним осуществляется при каждом запросе для определения блоков, содержащих данные, соответствующие заданным критериям поиска. [25]

Альтернативы [ править ]

Классические фильтры Блума используют бит пространства на каждый вставленный ключ, где — частота ложных срабатываний фильтра Блума. Однако пространство, которое строго необходимо для любой структуры данных, играющей ту же роль, что и фильтр Блума, составляет всего лишь за ключ. [26] Следовательно, фильтры Блума используют на 44% больше места, чем эквивалентная оптимальная структура данных.

Паг и др. предоставить структуру данных, которая использует бит, одновременно поддерживая операции с постоянным амортизированным ожидаемым временем. [27] Их структура данных в основном теоретическая, но она тесно связана с широко используемым фактором-фильтром , который можно параметризовать для использования биты пространства для произвольного параметра , поддерживая -временные операции. [28] Преимущества факторного фильтра по сравнению с фильтром Блума включают локальность ссылки и способность поддерживать удаления.

Еще одной альтернативой классическому фильтру Блума является фильтр cuckoo , основанный на компактных вариантах хеширования cuckoo . В этом случае создается хэш-таблица, содержащая не ключи и значения, а короткие отпечатки пальцев (небольшие хеши) ключей. Если при поиске ключа обнаруживается соответствующий отпечаток пальца, то, вероятно, ключ находится в наборе. Фильтры Cuckoo поддерживают удаления и имеют лучшую локальность ссылки, чем фильтры Блума. [29] Кроме того, в некоторых режимах параметров фильтры с кукушкой могут быть параметризованы так, чтобы гарантировать почти оптимальное пространство. [29]

Многие альтернативы фильтрам Блума, включая фильтры частных и фильтры кукушки , основаны на идее хеширования ключей к случайным значениям. -битные отпечатки пальцев, а затем сохраняют эти отпечатки в компактной хеш-таблице. Этот метод, впервые предложенный Carter et al. в 1978 году, [26] полагается на тот факт, что компактные хеш-таблицы могут быть реализованы для использования примерно бит меньше места, чем их некомпактные аналоги. Используя краткие хэш-таблицы, использование пространства можно сократить до минимума. биты [30] при этом поддерживая операции с постоянным временем в широком диапазоне режимов параметров.

Путце, Сандерс и Синглер (2007) изучили некоторые варианты фильтров Блума, которые либо работают быстрее, либо занимают меньше места, чем классические фильтры Блума. Основная идея быстрого варианта состоит в том, чтобы разместить k хеш-значений, связанных с каждым ключом, в один или два блока, имеющих тот же размер, что и блоки кэш-памяти процессора (обычно 64 байта). Это предположительно улучшит производительность за счет уменьшения количества потенциальных промахов в кэше памяти . Однако предложенные варианты имеют тот недостаток, что занимают примерно на 32% больше места, чем классические фильтры Блума.

Вариант с эффективным использованием пространства основан на использовании одной хэш-функции, которая генерирует для каждого ключа значение в диапазоне где — запрошенный уровень ложных срабатываний. Затем последовательность значений сортируется и сжимается с использованием кодирования Голомба (или другого метода сжатия), чтобы занять пространство, близкое к биты. Чтобы запросить фильтр Блума по заданному ключу, достаточно проверить, хранится ли соответствующее ему значение в фильтре Блума. Распаковка всего фильтра Блума для каждого запроса сделает этот вариант совершенно непригодным для использования. Чтобы решить эту проблему, последовательность значений делится на небольшие блоки одинакового размера, которые сжимаются отдельно. Во время запроса в среднем потребуется распаковать только половину блока. Из-за накладных расходов на декомпрессию этот вариант может быть медленнее, чем классические фильтры Блума, но это может быть компенсировано тем фактом, что необходимо вычислить одну хеш-функцию.

Граф и Лемир (2020) описывают подход, называемый фильтром xor, при котором они сохраняют отпечатки пальцев в идеальной хеш- таблице определенного типа, создавая фильтр, который более эффективно использует память ( бит на ключ) и быстрее, чем фильтры Блума или кукушки. (Экономия времени достигается за счет того, что для поиска требуется ровно три обращения к памяти, которые могут выполняться параллельно.) Однако создание фильтров более сложное, чем фильтры Блума и кукушки, и изменить набор после создания невозможно.

Расширения и приложения [ править ]

Существует более 60 вариантов фильтров Блума, множество исследований в этой области и постоянный поток приложений (см., например, Луо и др.). [31] ). Некоторые варианты существенно отличаются от исходного предложения, чтобы быть нарушением или разветвлением исходной структуры данных и ее философии. [31] подход, который объединит фильтры Блума с другими работами по случайным проекциям , компрессионному зондированию и хэшированию с учетом местоположения Еще предстоит разработать (хотя см. Dasgupta и др.). [32] за одну попытку, вдохновленную нейробиологией).

Фильтрация кэша [ править ]

Использование фильтра Блума для предотвращения сохранения однократных чудес в веб-кэше снизило скорость записи на диск почти вдвое, уменьшив нагрузку на диски и потенциально повысив производительность дисков. [13]

Сети доставки контента развертывают веб-кеши по всему миру для кэширования и предоставления веб-контента пользователям с большей производительностью и надежностью. Ключевым применением фильтров Блума является их использование для эффективного определения того, какие веб-объекты следует хранить в этих веб-кешах. Почти три четверти URL-адресов, к которым осуществляется доступ из обычного веб-кэша, представляют собой «одноразовые чудеса», к которым пользователи обращаются только один раз и никогда больше. Очевидно, что хранить одноразовые чудеса в веб-кэше — это расточительно с точки зрения дисковых ресурсов, поскольку к ним больше никогда не будет доступа. Чтобы предотвратить кэширование однократных чудес, используется фильтр Блума для отслеживания всех URL-адресов, к которым обращаются пользователи. Веб-объект кэшируется только в том случае, если к нему уже обращались хотя бы один раз, т. е. объект кэшируется при втором запросе. Использование фильтра Блума таким образом значительно снижает нагрузку на запись на диск, поскольку большинство однократных чудес не записываются в дисковый кеш. Кроме того, фильтрация однократных чудес также экономит место в кэше на диске, увеличивая частоту попаданий в кэш. [13]

вселенной ложных срабатываний в ограниченной избежать Как

Кисс и др. [33] описал новую конструкцию фильтра Блума, которая позволяет избежать ложных срабатываний в дополнение к типичному отсутствию ложноотрицательных результатов. Конструкция применима к конечной вселенной, из которой взяты элементы множества. Он основан на существующей схеме неадаптивного комбинаторного группового тестирования Эппштейна, Гудрича и Хиршберга. В отличие от типичного фильтра Блума, элементы хэшируются в битовый массив с помощью детерминированных, быстрых и простых в расчете функций. Максимальный размер набора, при котором полностью исключаются ложные срабатывания, является функцией размера юниверса и контролируется объемом выделенной памяти.

В качестве альтернативы, первоначальный фильтр Блума может быть построен стандартным способом, а затем с помощью конечной и легко перечислимой области можно полностью найти все ложные срабатывания, а затем построить второй фильтр Блума на основе этого списка; ложные срабатывания во втором фильтре обрабатываются аналогичным образом путем построения третьего и так далее. Поскольку Вселенная конечна, а набор ложноположительных результатов строго сжимается с каждым шагом, эта процедура приводит к созданию конечного каскада фильтров Блума, которые (в этой закрытой, конечной области) будут давать только истинно положительные и истинно отрицательные результаты. Чтобы проверить членство в каскаде фильтров, запрашивается первоначальный фильтр, и, если результат положительный, затем обращается ко второму фильтру и так далее. Эта конструкция используется в CRLite , предложенном механизме распределения статуса отзыва сертификатов для Web PKI , а «Прозрачность сертификатов» используется для закрытия набора существующих сертификатов. [34]

Подсчет фильтров Блума [ править ]

Фильтры подсчета позволяют реализовать операцию удаления фильтра Блума без повторного создания фильтра. В счетном фильтре позиции массива (сегменты) расширяются от однобитового до многобитного счетчика. По сути, обычные фильтры Блума можно рассматривать как счетные фильтры с размером сегмента в один бит. Счетные фильтры были предложены Fan et al. (2000) .

Операция вставки расширена для увеличения значения сегментов, а операция поиска проверяет, что каждый из требуемых сегментов не равен нулю. Тогда операция удаления состоит из уменьшения значения каждого из соответствующих сегментов.

Арифметическое переполнение сегментов является проблемой, и сегменты должны быть достаточно большими, чтобы этот случай был редким. Если это происходит, то операции увеличения и уменьшения должны оставить для сегмента максимально возможное значение, чтобы сохранить свойства фильтра Блума.

Размер счетчиков обычно составляет 3 или 4 бита. Следовательно, подсчетные фильтры Блума занимают в 3–4 раза больше места, чем статические фильтры Блума. Напротив, структуры данных Pagh, Pagh & Rao (2005) и Fan et al. (2014) также допускают удаление, но занимают меньше места, чем статический фильтр Блума.

Еще одна проблема с подсчетом фильтров — ограниченная масштабируемость. Поскольку таблица счетного фильтра Блума не может быть расширена, максимальное количество ключей, одновременно сохраняемых в фильтре, должно быть известно заранее. Как только проектная емкость таблицы будет превышена, уровень ложных срабатываний будет быстро расти по мере вставки большего количества ключей.

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

Вариант с эффективным использованием пространства, предложенный Путце, Сандерсом и Синглером (2007), также может использоваться для реализации фильтров подсчета путем поддержки вставок и удалений.

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

Ким и др. (2019) показывает, что ложное срабатывание фильтра Блума подсчета уменьшается от k = 1 до определенной точки. и увеличивается от до положительной бесконечности и находит как функция порога счета. [35]

Децентрализованная агрегация [ править ]

Фильтры Блума могут быть организованы в распределенные структуры данных для выполнения полностью децентрализованных вычислений агрегатных функций . Децентрализованное агрегирование делает коллективные измерения локально доступными в каждом узле распределенной сети без привлечения для этой цели централизованного вычислительного объекта. [36]

Распределенные фильтры Блума [ править ]

Распределенный фильтр Блума Single Shot для обнаружения дубликатов с частотой ложных срабатываний: 6 элементов распределяются по 3 PE, каждый из которых имеет битовый массив длиной 4. На первом этапе связи PE 1 дважды получает хеш-код «2» и отправляет его обратно любому PE 2 или 3, в зависимости от того, кто прислал его позже. PE, который получает хэш «2», затем ищет элемент с этим хешем и помечает его как возможный дубликат.

Параллельные фильтры Блума могут быть реализованы, чтобы использовать преимущества нескольких процессорных элементов (PE), присутствующих в параллельных машинах без общего доступа . Одним из основных препятствий для параллельного фильтра Блума является организация и передача неупорядоченных данных, которые, как правило, распределяются равномерно по всем PE при инициации или при пакетной вставке. Для упорядочивания данных можно использовать два подхода: либо фильтр Блума для всех данных, хранящихся на каждом PE, называемый реплицирующим фильтром Блума, либо фильтр Блума для всех данных, разделенных на равные части, причем каждый PE сохраняет одну часть. . [37] Для обоих подходов используется фильтр Блума «Single Shot», который вычисляет только один хеш, в результате чего на каждый элемент получается один перевернутый бит, чтобы уменьшить объем связи.

Распределенные фильтры Блума инициируются путем хеширования всех элементов на их локальном PE, а затем их локальной сортировки по хэшам. Это можно сделать в линейном времени, используя, например, сортировку по сегментам , а также позволяет локально обнаруживать дубликаты. Сортировка используется для группировки хешей с назначенным им PE в качестве разделителя для создания фильтра Блума для каждой группы. После кодирования этих фильтров Блума с использованием, например, кодирования Голомба, каждый фильтр Блума отправляется в виде пакета PE, ответственному за хэш-значения, которые были вставлены в него. PE p отвечает за все хэши между значениями. и , где s — общий размер фильтра Блума по всем данным. Поскольку каждый элемент хешируется только один раз и, следовательно, устанавливается только один бит, для проверки того, был ли элемент вставлен в фильтр Блума, необходимо использовать только PE, ответственный за хеш-значение элемента. Одиночные операции вставки также могут выполняться эффективно, поскольку необходимо менять фильтр Блума только одного PE, в отличие от репликации фильтров Блума, где каждый PE должен обновлять свой фильтр Блума. Распределяя глобальный фильтр Блума по всем PE вместо того, чтобы хранить его отдельно на каждом PE, размер фильтров Блума может быть намного больше, что приводит к большей емкости и снижению уровня ложных срабатываний.
Распределенные фильтры Блума можно использовать для улучшения алгоритмов обнаружения дубликатов. [38] отфильтровывая самые «уникальные» элементы. Их можно вычислить, передав только хэши элементов, а не сами элементы, объем которых намного больше, и удалив их из набора, уменьшив рабочую нагрузку на используемый впоследствии алгоритм обнаружения дубликатов.

Во время передачи хэшей PE ищут биты, которые установлены более чем в одном из принимаемых пакетов, поскольку это будет означать, что два элемента имеют одинаковый хэш и, следовательно, могут быть дубликатами. Если это происходит, сообщение, содержащее индекс бита, который также является хешем элемента, который может быть дубликатом, отправляется тем PE, которые отправили пакет с установленным битом. Если один отправитель отправляет несколько индексов в один и тот же PE, может быть выгодно также закодировать индексы. Все элементы, хеш которых не был отправлен обратно, теперь гарантированно не будут дубликатами и не будут оцениваться в дальнейшем, для остальных элементов используется алгоритм перераспределения. [39] можно использовать. Сначала все элементы, хеш-значения которых были отправлены обратно, отправляются в PE, за который отвечает их хеш-значение. Любой элемент и его дубликат теперь гарантированно находятся на одном PE. На втором этапе каждый PE использует последовательный алгоритм обнаружения дубликатов на принимающих элементах, которые составляют лишь часть количества стартовых элементов. Допустив частоту ложных срабатываний для дубликатов, можно еще больше сократить объем связи, поскольку PE вообще не нужно отправлять элементы с дублированными хэшами, и вместо этого любой элемент с дублированным хэшем может быть просто помечен как дубликат. В результате частота ложных срабатываний при обнаружении дубликатов такая же, как и частота ложных срабатываний используемого фильтра Блума.

Процесс фильтрации наиболее «уникальных» элементов также можно повторять несколько раз, изменяя хэш-функцию на каждом этапе фильтрации. Если используется только один шаг фильтрации, он должен архивировать небольшой уровень ложных срабатываний, однако, если шаг фильтрации повторяется один раз, первый шаг может позволить более высокий уровень ложных срабатываний, в то время как последний имеет более высокий уровень ложных срабатываний, но также работает на меньшем количестве элементов. так как многие из них уже были удалены на предыдущем этапе фильтрации. Хотя использование более двух повторений может еще больше уменьшить объем общения, если количество дубликатов в наборе невелико, отдача от дополнительных усложнений невелика.

Репликативные фильтры Блума организуют свои данные, используя хорошо известный алгоритм гиперкуба для распространения сплетен, например [40] Сначала каждый PE вычисляет фильтр Блума для всех локальных элементов и сохраняет его. Повторяя цикл, в котором на каждом шаге i PE отправляют свой локальный фильтр Блума по измерению i и объединяют фильтр Блума, который они получают по измерению, со своим локальным фильтром Блума, можно удвоить количество элементов, содержащихся в каждом фильтре Блума, на каждой итерации. После отправки и получения фильтров Bloom по всем Размеры: каждый PE содержит глобальный фильтр Блума для всех элементов.

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

Синхронизация данных [ править ]

Фильтры Блума можно использовать для приблизительной синхронизации данных , как в Byers et al. (2004) . Подсчет фильтров Блума можно использовать для аппроксимации количества различий между двумя наборами, и этот подход описан в Agarwal & Trachtenberg (2006) .

Блума для потоковой данных передачи Фильтры

Фильтры Блума можно адаптировать к контексту потоковой передачи данных. Например, Денг и Рафии (2006) предложили фильтры Стабильного Блума, которые состоят из счетного фильтра Блума, в котором вставка нового элемента устанавливает связанные счетчики в значение c , а затем только фиксированное количество счетчиков s уменьшается на 1, следовательно, память в основном содержит информацию о последних элементах (интуитивно можно предположить, что время жизни элемента внутри SBF из N счетчиков составляет около ). Другим решением является фильтр Aging Bloom, который состоит из двух фильтров Bloom, каждый из которых занимает половину всей доступной памяти: когда один фильтр заполнен, второй фильтр стирается, и к этому новому пустому фильтру затем добавляются новые элементы. [41]

Однако было показано [42] что независимо от фильтра, после n вставок сумма ложных срабатываний и ложноотрицательный вероятности ограничены снизу

где L — количество всех возможных элементов (размер алфавита), m — объем памяти (в битах), полагая . Этот результат показывает, что при достаточно большом L и стремлении n к бесконечности нижняя оценка сходится к , что является характеристическим соотношением случайного фильтра. Следовательно, после достаточного количества вставок и если алфавит слишком велик для хранения в памяти (что предполагается в контексте вероятностных фильтров), фильтр не может работать лучше, чем случайный. Этот результат можно использовать, ожидая, что фильтр будет работать только со скользящим окном, а не со всем потоком. В этом случае показатель степени n в приведенной выше формуле заменяется на w , что дает формулу, которая может отклоняться от 1, если w не слишком мало.

Фильтры Bloomier [ править ]

Шазель и др. (2004) разработали обобщение фильтров Блума, которые могли связывать значение с каждым вставленным элементом, реализуя ассоциативный массив . Подобно фильтрам Блума, эти структуры обеспечивают небольшой объем накладных расходов, допуская небольшую вероятность ложных срабатываний. В случае с «фильтрами Блумье» ложное срабатывание определяется как возврат результата, когда ключ отсутствует на карте. Карта никогда не вернет неправильное значение для ключа, находящегося на карте.

Компактные аппроксиматоры [ править ]

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

Фильтры Блума с параллельными разделами [ править ]

В этой реализации для каждой хэш-функции использовался отдельный массив. Этот метод позволяет выполнять параллельные хэш-вычисления как для вставок, так и для запросов. [43]

Масштабируемые фильтры Блума [ править ]

Алмейда и др. (2007) предложили вариант фильтров Блума, которые могут динамически адаптироваться к количеству хранимых элементов, обеспечивая при этом минимальную вероятность ложного срабатывания. Этот метод основан на последовательностях стандартных фильтров Блума с увеличивающейся пропускной способностью и более жесткими вероятностями ложных срабатываний, чтобы гарантировать, что максимальная вероятность ложного срабатывания может быть установлена ​​заранее, независимо от количества вставляемых элементов.

Пространственные фильтры Блума [ править ]

Пространственные фильтры Блума (SBF) были первоначально предложены Палмиери, Кальдерони и Майо (2014) как структура данных, предназначенная для хранения информации о местоположении , особенно в контексте криптографических протоколов для обеспечения конфиденциальности местоположения . Однако основной характеристикой SBF является их способность хранить несколько наборов в одной структуре данных, что делает их подходящими для ряда различных сценариев применения. [44] Принадлежность элемента к определенному набору может быть запрошена, и вероятность ложного срабатывания зависит от набора: первые наборы, вводимые в фильтр во время построения, имеют более высокие вероятности ложного срабатывания, чем наборы, введенные в конце. [45] Это свойство позволяет устанавливать приоритеты наборов, при этом можно сохранить наборы, содержащие более «важные» элементы.

Многослойные фильтры Блума [ править ]

Многослойный фильтр Блума состоит из нескольких слоев фильтра Блума. Многослойные фильтры Блума позволяют отслеживать, сколько раз элемент был добавлен в фильтр Блума, проверяя, сколько слоев содержит этот элемент. При использовании многоуровневого фильтра Блума операция проверки обычно возвращает номер самого глубокого слоя, в котором был найден элемент. [46]

Ослабленные фильтры Блума [ править ]

Пример ослабленного фильтра Блума: поиск шаблона 11010, начиная с узла n1.

Ослабленный фильтр Блума глубины D можно рассматривать как массив D обычных фильтров Блума. В контексте обнаружения сервисов в сети каждый узел локально хранит обычные и ослабленные фильтры Блума. Обычный или локальный фильтр Блума указывает, какие услуги предлагает сам узел. Ослабленный фильтр уровня i указывает, какие сервисы можно найти на узлах, находящихся на расстоянии i-х шагов от текущего узла. i-е значение создается путем объединения локальных фильтров Блума для узлов, находящихся на расстоянии i-го шага от узла. [47]

Например, рассмотрим небольшую сеть, показанную на графике ниже. Предположим, мы ищем сервис A, идентификатор которого хэшируется битами 0, 1 и 3 (шаблон 11010). Пусть n1 узел будет отправной точкой. Сначала мы проверяем, предлагает ли услуга A n1, проверив его локальный фильтр. Поскольку шаблоны не совпадают, мы проверяем ослабленный фильтр Блума, чтобы определить, какой узел должен быть следующим прыжком. Мы видим, что n2 не предлагает услугу A, но находится на пути к узлам, которые ее предоставляют. Следовательно, мы переходим к n2 и повторяем ту же процедуру. Мы быстро обнаруживаем, что n3 предлагает услугу, и, следовательно, пункт назначения находится. [48]

Используя ослабленные фильтры Блума, состоящие из нескольких слоев, можно обнаружить услуги на расстоянии более одного скачка, избегая при этом насыщения фильтра Блума за счет ослабления (сдвига) битов, установленных более удаленными источниками. [47]

Поиск химической структуры

Фильтры Блума часто используются для поиска в больших базах данных химических структур (см. химическое сходство ). В простейшем случае элементы, добавленные в фильтр (в этой области называемые «отпечатками пальцев»), представляют собой просто атомные номера, присутствующие в молекуле, или хэш, основанный на атомном номере каждого атома, а также количестве и типе его связей. Этот случай слишком прост, чтобы быть полезным. Более продвинутые фильтры также кодируют количество атомов, более крупные особенности субструктуры, такие как карбоксильные группы, и графические свойства, такие как количество колец. В отпечатках пальцев на основе хэша хэш-функция, основанная на свойствах атома и связи, используется для превращения подграфа в начальное число PRNG , а первые выходные значения используются для установки битов в фильтре Блума.

Молекулярные отпечатки пальцев появились в конце 1940-х годов как способ поиска химических структур на перфокартах. Однако только примерно в 1990 году компания Daylight Chemical Information Systems, Inc. представила метод генерации битов на основе хеш-функции вместо использования предварительно вычисленной таблицы. В отличие от словарного подхода, хэш-метод может присваивать биты подструктурам, которые ранее не были замечены. В начале 1990-х годов термин «отпечаток пальца» считался отличным от «структурных ключей», но с тех пор этот термин расширился и стал охватывать большинство молекулярных характеристик, которые можно использовать для сравнения сходства, включая структурные ключи, отпечатки разреженного количества и 3D-отпечатки пальцев. . В отличие от фильтров Блума, метод хеширования дневного света позволяет количеству битов, назначенных для каждого объекта, быть функцией размера объекта, но в большинстве реализаций отпечатков пальцев, подобных дневному свету, используется фиксированное количество битов на объект, что делает их фильтром Блума. Оригинальные отпечатки пальцев Daylight можно было использовать как в целях сходства, так и в целях проверки. Многие другие типы отпечатков пальцев, такие как популярный ECFP2, можно использовать для сходства, но не для скрининга, поскольку они включают в себя местные характеристики окружающей среды, которые приводят к ложноотрицательным результатам при использовании в качестве экрана. Даже если они созданы с использованием одного и того же механизма, это не фильтры Блума, поскольку их нельзя использовать для фильтрации.

См. также [ править ]

Ссылки [ править ]

Цитаты [ править ]

  1. ^ Блум (1970) .
  2. ^ Бономи и др. (2006) .
  3. ^ Диллинджер и Манолиос (2004a) ; Кирш и Митценмахер (2006) .
  4. ^ Митценмахер и Упфаль (2005) .
  5. ^ Блюштейн и Эль-Маазави (2002) , стр. 21–22.
  6. ^ Гопинатан, Киран; Сергей, Илья (21 июля 2020 г.). «Подтверждение достоверности и неопределенности в приблизительных структурах запросов на членство». Компьютерная проверка . Конспекты лекций по информатике. Том. 12225. Спрингер, Чам. стр. 279–303. дои : 10.1007/978-3-030-53291-8_16 . ISBN  978-3-030-53290-1 . ПМК   7363400 .
  7. ^ Митценмахер и Упфаль (2005) , стр. 109–111, 308.
  8. ^ Митценмахер и Упфаль (2005) , с. 308.
  9. ^ Старобински, Трахтенберг и Агарвал (2003)
  10. ^ Гоэл и Гупта (2010)
  11. ^ Jump up to: Перейти обратно: а б Свамидасс, С. Джошуа; Бальди, Пьер (2007). «Математическая коррекция показателей сходства отпечатков пальцев для улучшения химического поиска». Журнал химической информации и моделирования . 47 (3): 952–964. дои : 10.1021/ci600526a . ПМИД   17444629 .
  12. ^ Дасгупта, Санджой; Шиэн, Тимоти К.; Стивенс, Чарльз Ф.; Навлаха, Сакет (18 декабря 2018 г.). «Нейронная структура данных для обнаружения новизны» . Труды Национальной академии наук . 115 (51): 13093–13098. Бибкод : 2018PNAS..11513093D . дои : 10.1073/pnas.1814448115 . ISSN   0027-8424 . ПМК   6304992 . ПМИД   30509984 .
  13. ^ Jump up to: Перейти обратно: а б с Мэггс и Ситараман (2015) .
  14. ^ «Модуль вклада индекса Блума» . Postgresql.org. 01.04.2016. Архивировано из оригинала 9 сентября 2018 г. Проверено 18 июня 2016 г.
  15. ^ Чанг и др. (2006) ; Фонд программного обеспечения Apache (2012) .
  16. ^ Якунин, Алекс (25 марта 2010 г.). «Блог Алекса Якунина: Приложение-фильтр Nice Bloom» . Блог.alexyakunin.com. Архивировано из оригинала 27 октября 2010 г. Проверено 31 мая 2014 г.
  17. ^ «Проблема 10896048: переход безопасного просмотра с фильтра Блума на набор префиксов. — Проверка кода» . Chromiumcodereview.appspot.com . Проверено 3 июля 2014 г.
  18. ^ Гудвин, Боб; Хопкрофт, Майкл; Луу, Дэн; Клеммер, Алекс; Курмей, Михаэла; Эльникети, Самех; Юсюн, Хэ (2017). «BitFunnel: новый взгляд на сигнатуры для поиска» (PDF) . СИГИР : 605–614. дои : 10.1145/3077136.3080789 . S2CID   20123252 .
  19. ^ Весселс (2004) .
  20. ^ «Фильтр Блума | Речной словарь» . Ривер Финансовый . Проверено 14 ноября 2020 г.
  21. ^ «План 9 /sys/man/8/venti» . Plan9.bell-labs.com. Архивировано из оригинала 28 августа 2014 г. Проверено 31 мая 2014 г.
  22. ^ «Спин – формальная проверка» .
  23. ^ Маллин (1990) .
  24. ^ «Что такое фильтры Блума?» . Середина. 15 июля 2015 г. Проверено 1 ноября 2015 г.
  25. ^ «Документация Grafana Tempo — Кэширование» . Графана . Проверено 16 ноября 2022 г.
  26. ^ Jump up to: Перейти обратно: а б Картер, Ларри; Флойд, Роберт; Гилл, Джон; Марковский, Джордж; Вегман, Марк (1978). «Точные и приблизительные тестеры принадлежности» . Материалы десятого ежегодного симпозиума ACM по теории вычислений - STOC '78 . Нью-Йорк, Нью-Йорк, США: ACM Press. стр. 59–65. дои : 10.1145/800133.804332 . S2CID   6465743 .
  27. ^ Пах, Пах и Рао (2005) .
  28. ^ Бендер, Майкл А.; Фарах-Колтон, Мартин; Джонсон, Роб; Кранер, Рассел; Кушмаул, Брэдли С.; Медедович, Дзейла; Монтес, Пабло; Шетти, Прадип; Спиллейн, Ричард П.; Садок, Эрез (июль 2012 г.). «Не ругайся» . Труды Фонда VLDB . 5 (11): 1627–1637. дои : 10.14778/2350229.2350275 . ISSN   2150-8097 . S2CID   47180056 .
  29. ^ Jump up to: Перейти обратно: а б Даже, Томер; Даже, Гай; Моррисон, Адам (март 2022 г.). «Фильтр префиксов» . Труды Фонда VLDB . 15 (7): 1311–1323. дои : 10.14778/3523210.3523211 . ISSN   2150-8097 .
  30. ^ Бендер, Майкл А.; Фарах-Колтон, Мартин; Кушмаул, Джон; Кушмаул, Уильям; Лю, Минмоу (9 июня 2022 г.). «Об оптимальном компромиссе между временем и пространством для хеш-таблиц» . Материалы 54-го ежегодного симпозиума ACM SIGACT по теории вычислений . Нью-Йорк, штат Нью-Йорк, США: ACM. стр. 1284–1297. arXiv : 2111.00602 . дои : 10.1145/3519935.3519969 . hdl : 1721.1/146419 . ISBN  9781450392648 . S2CID   240354692 .
  31. ^ Jump up to: Перейти обратно: а б Ло, Лайлун; Го, Дик; Ма, Ричард Т.Б.; Роттенштрайх, Ори; Ло, Сюешань (13 апреля 2018 г.). «Оптимизация фильтра Блума: проблемы, решения и сравнения». arXiv : 1804.04777 [ cs.DS ].
  32. ^ Дасгупта, Санджой; Шиэн, Тимоти К.; Стивенс, Чарльз Ф.; Навлахае, Сакет (2018). «Нейронная структура данных для обнаружения новизны» . Труды Национальной академии наук . 115 (51): 13093–13098. Бибкод : 2018PNAS..11513093D . дои : 10.1073/pnas.1814448115 . ПМК   6304992 . ПМИД   30509984 .
  33. ^ Поцелуй, СЗ; Хоссу, Э.; Таполькай, Дж.; Роньяи, Л.; Роттенштрайх, О. (2018). «Фильтр Блума с ложноположительной свободной зоной» (PDF) . IEEE Труды INFOCOM . Проверено 4 декабря 2018 г.
  34. ^ Лариш, Джеймс; Чоффнес, Дэвид; Левин, Дэйв; Мэггс, Брюс М.; Мислов, Алан; Уилсон, Христо (2017). «CRLite: масштабируемая система для отправки всех отзывов TLS во все браузеры». Симпозиум IEEE по безопасности и конфиденциальности (SP) 2017 г. стр. 539–556. дои : 10.1109/sp.2017.17 . ISBN  978-1-5090-5533-3 . S2CID   3926509 .
  35. ^ Ким, Кибеом; Чон, Ёнджо; Ли, Ёнджу; Ли, Сунгу (11 июля 2019 г.). «Анализ подсчетных фильтров Блума, используемых для порогового значения подсчета» . Электроника . 8 (7): 779. doi : 10.3390/electronics8070779 . ISSN   2079-9292 .
  36. ^ Пурнарас, Варнье и Бразье (2013) .
  37. ^ Сандерс, Питер; Шлаг, Себастьян; Мюллер, Инго (2013). «Коммуникационные эффективные алгоритмы для решения фундаментальных проблем больших данных». Международная конференция IEEE по большим данным 2013 г. стр. 15–23. дои : 10.1109/BigData.2013.6691549 . ISBN  978-1-4799-1293-3 . S2CID   15968541 .
  38. ^ Шлаг, Себастьян (2013). «Распределенное удаление дубликатов». Технологический институт Карлсруэ .
  39. ^ Шатдал, Амбуж; Джеффри Ф. Нотон (1994). «Обработка агрегатов в параллельных системах баз данных». Факультет компьютерных наук Университета Висконсин-Мэдисон : 8.
  40. ^ В. Кумар; А. Грама; А. Гупта; Г. Карипис (1994). Введение в параллельные вычисления. Проектирование и анализ алгоритмов . Бенджамин/Каммингс.
  41. ^ Юн, МёнГын (2010). «Стареющий фильтр Блума с двумя активными буферами для динамических наборов». Транзакции IEEE по знаниям и инженерии данных . 22 (1): 134–138. дои : 10.1109/TKDE.2009.136 . S2CID   15922054 .
  42. ^ Жеро-Стюарт, Реми; Ломбард-Плате, Мариус; Наккаче, Дэвид (2020). «Приближение к оптимальному обнаружению дубликатов в скользящем окне». Вычисления и комбинаторика . Конспекты лекций по информатике. Том. 12273. стр. 64–84. arXiv : 2005.04740 . дои : 10.1007/978-3-030-58150-3_6 . ISBN  978-3-030-58149-7 . S2CID   218581915 .
  43. ^ Кирш, Адам; Митценмахер†, Майкл. «Меньше хэширования, та же производительность: создание лучшего фильтра Блума» (PDF) . Гарвардская школа инженерии и прикладных наук . Уайли ИнтерСайенс.
  44. ^ Кальдерони, Палмьери и Майо (2015) .
  45. ^ Кальдерони, Палмьери и Майо (2018) .
  46. ^ Чживанг, Юнган и Цзянь (2010) .
  47. ^ Jump up to: Перейти обратно: а б Кучеряви и др. (2009) .
  48. ^ Кубятович и др. (2000) .

Цитируемые работы [ править ]

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 836a35a0666ca96143bf91bf919c9978__1718029020
URL1:https://arc.ask3.ru/arc/aa/83/78/836a35a0666ca96143bf91bf919c9978.html
Заголовок, (Title) документа по адресу, URL1:
Bloom filter - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)