Участник:Joparino/Кукушкин фильтр
Кукушкин фильтр — это пространственно-эффективная вероятностная структура данных, которая используется для проверки, является ли элемент членом множества, как это делает фильтр Блума. Ложноположительные результаты возможны, но ложноотрицательные результаты не возможны – другими словами, запрос возвращает либо "возможно в множестве" или "точно не в множестве". Кукушкин фильтр также может удалять существующие элементы, что не умеет фильтр Блума. В дополнении, для приложения, которые хранят много элементов и нацелены на умеренно низкие показатели ложноположительных результатов, кукушкин фильтр позволяет добиться меньших затрат пространства, чем оптимизированный по пространству фильтр Блума.[1]
Кукушкин фильтр впервые был описан в 2014 году.[2]
Алгоритм
Кукушкин фильтр использует -way множество-ассоциативную хеш-таблицу, использующую кукушкино хеширование для хранения цифровых отпечатков всех элементов (в каждом сегменте хеш-таблицы может храниться до записей). В частности, два потенциальных сегмента и в таблице для данного элемента требуемые для кукушкиного хеширования, вычисляются с помощью следующих двух хэш-функций (называется кукушкино хеширование с частичным ключом[2]):
Применение двух вышеуказанных хеш-функций для построения кукушкиных хеш-таблиц позволяет перемещать элементы только на основе отпечатков пальцев, когда извлечение исходного элемента невозможно. В результате при вставке нового элемента, который требует перемещения существующего элемента другое возможное местоположение в таблице для этого элемента исключается из корзины вычисляется по
На основе кукушкиного хеширования с частичным ключом, хеш-таблица может обеспечить как высокую степень использования (благодаря кукушкиному хещированию), так и компактность, поскольку сохраняются только цифровые отпечатки. Операции поиска и удаления кукушкиного фильтра просты. Существует максимум два местоположения для проверки с помощью и . Если найдено, соответствующая операция поиска или удаления может быть выполнена за время . Более подробный теоретический анализ кукушкиного фильтра можно найти в литературе.[3][4]
Сравнение с фильтрами Блума
Кукушкин фильтр похож на фильтр Блума в том, что они оба очень быстры и компактны, и оба они могут возвращать ложноположительные срабатывания в качестве ответов на запросы с заданным членством:
- Пространственно-оптимальные фильтры Блума используют биты для каждого вставленного ключа, где — частота ложноположительных срабатываний. Кукушкину фильтру необходимо , где — является коэффициентом загрузки хэш-таблицы, который может быть в зависимости от настройки кукушкиного фильтра. Отметим, что теоретическая нижняя граница информации требует битов для каждого элемента.
- При положительном поиске, пространственно-оптимальный фильтр Блума требует постоянного доступа к памяти в битовый массив, в то время как кукушкин фильтр требуется не более двух постоянных поисков.
- Кукушкин фильтр снижает скорость вставки после достижения порогового значения нагрузки, когда рекомендуется расширять таблицу. В отличие от этого, фильтры Блума могут продолжать вставлять новые элементы за счет более высокой частоты ложных срабатываний перед расширением.
Ограничения
- Кукушкин фильтр можно удалять только те элементы, которые, как известно, были вставлены ранее.
- Вставка может завершиться неудачей, и потребуется перефразирование, как и в других хеш-таблицах. Стоит отметить, что амортизированная сложность вставки по-прежнему .[5]
Ссылки
- ↑ Michael D. Mitzenmacher. Bloom Filters, Cuckoo Hashing, Cuckoo Filters, Adaptive Cuckoo Filters, and Learned Bloom Filters .
- ↑ 1 2 Fan, Bin; Andersen, Dave G.; Kaminsky, Michael; Mitzenmacher, Michael D. (2014). Cuckoo filter: Practically better than Bloom. Proc. 10th ACM International on Conference on Emerging Networking Experiments and Technologies (CoNEXT '14). Sydney, Australia. pp. 75—88. doi:10.1145/2674005.2674994. ISBN 9781450332798.
- ↑
Eppstein, David (22 June 2016). Cuckoo filter: Simplification and analysis. Proc. 15th Scandinavian Symposium and Workshops on Algorithm Theory (SWAT 2016). Leibniz International Proceedings in Informatics (LIPIcs). Vol. 53. Reykjavik, Iceland. pp. 8:1–8:12. arXiv:1604.06067. doi:10.4230/LIPIcs.SWAT.2016.8.
{{cite conference}}
: Википедия:Обслуживание CS1 (не помеченный открытым DOI) (ссылка) - ↑ Fleming, Noah (17 May 2018). Cuckoo Hashing and Cuckoo Filters (PDF) (Technical report). University of Toronto.
- ↑ Pagh, Rasmus; Rodler, Flemming Friche (2001). "Cuckoo hashing". Proc. 9th Annual European Symposium on Algorithms (ESA 2001). Lecture Notes in Computer Science. Vol. 2161. Århus, Denmark. pp. 121—133. doi:10.1007/3-540-44676-1_10. ISBN 978-3-540-42493-2.