Участник:Joparino/Кукушкин фильтр: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
Содержимое удалено Содержимое добавлено
Новая страница: «'''Кукушкин фильтр''' — это пространственно-эффективная вероятностная структура данных, которая используется для проверки, является ли элемент членом множества, как это делает Фильтр Блума. Ошибки п...»
 
Нет описания правки
Строка 22: Строка 22:


==Алгоритм==
==Алгоритм==
Кукушкин фильтр использует <math>n</math>-way множество-ассоциативную хеш-таблицу, использующую [[кукушкино хеширование]] для хранения [[Цифровые отпечатки|цифровых отпечатков]] всех элементов (в каждом сегменте хеш-таблицы может храниться до <math>n</math> записей). В частности, два потенциальных сегмента <math>i</math> и <math>j</math> в таблице для данного элемента <math>x</math> требуемые для кукушкиного хеширования, вычисляются с помощью следующих двух хэш-функций (называется ''кукушкино хеширование с частичным ключом''<ref name="CuckooFilter" />):
A cuckoo filter uses a <math>n</math>-way set-associative hash table based on [[cuckoo hashing]] to store the [[fingerprint (computing)|fingerprint]]s of all items (every bucket of the hashtable can store up to <math>n</math> entries).
Particularly, the two potential buckets <math>i</math> and <math>j</math> in the table for a given item <math>x</math> required
by cuckoo hashing are calculated by the following two hash functions
(termed as ''partial-key cuckoo hashing''<ref name="CuckooFilter" />):


:<math>i = h_1(x)=\text{hash}(x)</math><br/>
:<math>i = h_1(x)=\text{hash}(x)</math><br/>

Версия от 16:07, 12 июля 2022

Кукушкин фильтр — это пространственно-эффективная вероятностная структура данных, которая используется для проверки, является ли элемент членом множества, как это делает Фильтр Блума. Ложноположительные результаты возможны, но ложноотрицательные результаты не возможны – другими словами, запрос возвращает либо "возможно в множестве" или "точно не в множестве". Кукушкин фильтр также может удалять существующие элементы, что не умеет фильтр Блума. В дополнении, для приложения, которые хранят много элементов и нацелены на умеренно низкие показатели ложноположительных результатов, кукушкин фильтр позволяет добиться меньших затрат пространства, чем оптимизированный по пространству фильтр Блума.[1]

Кукушкин фильтр впервые был описан в 2014 году.[2]

Алгоритм

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


Applying the above two hash functions to construct a cuckoo hash table enables item relocation based only on fingerprints when retrieving the original item is impossible. As a result, when inserting a new item that requires relocating an existing item , the other possible location in the table for this item kicked out from bucket is calculated by

Based on partial-key cuckoo hashing, the hash table can achieve both highly-utilization (thanks to cuckoo hashing), and compactness because only fingerprints are stored. Lookup and delete operations of a cuckoo filter are straightforward. There are a maximum of two locations to check by and . If found, the appropriate lookup or delete operation can be performed in time. More theoretical analysis of cuckoo filters can be found in the literature.[3][4]

Comparison to Bloom filters

A cuckoo filter is similar to a Bloom filter in that they both are very fast and compact, and they may both return false positives as answers to set-membership queries:

  • Space-optimal Bloom filters use bits of space per inserted key, where is the false positive rate. A cuckoo filter requires where is the hash table load factor, which can be based on the cuckoo filter's setting. Note that the information theoretical lower bound requires bits for each item.
  • On a positive lookup, a space-optimal Bloom filter requires a constant memory accesses into the bit array, whereas a cuckoo filter requires constant two lookups at most.
  • Cuckoo filters have degraded insertion speed after reaching a load threshold, when table expanding is recommended. In contrast, Bloom filters can keep inserting new items at the cost of a higher false positive rate before expansion.

Limitations

  • A cuckoo filter can only delete items that are known to be inserted before.
  • Insertion can fail and rehashing is required like other cuckoo hash tables. Note that the amortized insertion complexity is still .[5]

References

  1. Michael D. Mitzenmacher. Bloom Filters, Cuckoo Hashing, Cuckoo Filters, Adaptive Cuckoo Filters, and Learned Bloom Filters.
  2. 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.
  3. 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) (ссылка)
  4. Fleming, Noah (17 May 2018). Cuckoo Hashing and Cuckoo Filters (PDF) (Technical report). University of Toronto.
  5. 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.