Обсуждение участника:Kurkin — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
(Новая страница: «=Quotient filter= kghfkyufk»)
 
Строка 1: Строка 1:
 
=Quotient filter=
 
=Quotient filter=
kghfkyufk
+
{{Определение
 +
|definition =
 +
'''Quotient filter''' {{---}} вероятностная структура данных, позволяющая проверить принадлежность элемента множеству. При этом существует возможность получить ложноположительное срабатывание (элемента в множестве нет, но структура данных сообщает, что он есть), но не ложноотрицательное.
 +
}}
 +
 
 +
Существует связь между размером хранилища и шансом ложноположительного срабатывания. Поддерживаются операции добавления и удаления элементов в множество. С увеличением размера хранимого множества повышается вероятность ложного срабатывания.
 +
Структура разработана в 2011 году Бендером как замена [[:Фильтр_Блума|фильтра Блума]].
 +
 
 +
==Описание структуры данных==
 +
 
 +
Фильтр представляет собой хеш таблицу в которой харанится часть ключа и 3 бита дополнительной информации. Они используются для разрешения ситуации, когда хеш различных ключей указывает на одну ячейку в хеш таблице. В <tex>Quotient filter</tex> хеш функция возвращает <tex>p</tex> битовый хеш, последние r бит которого называются остаток, а <tex>q = p - r</tex> старших бит называются частное (англ. ''quotient''), отсюда название структуры Quotient filter(придумано Кнутом в The Art of Computer Programming:Searching and Sorting, volume 3. Section 6.4, exercise 13). Размер хеш таблицы составляет 2^q.
 +
 
 +
Пусть у нас есть ключ <tex>D</tex>, его хеш обозначим <tex>Dh</tex>, остаток <tex>Dr</tex> и частное <tex>Dq</tex>. Попробуем поместить остаток в хеш таблицу в ячейку <tex>Dq</tex>, называемую канонической. Возможно ячейка уже занята, так как существует шанс полных коллизий (остаток и частное разных ключей совпадают) или частичных коллизий (частное разных ключей совпадают). Когда каноническая ячейка занята, помещаем остаток в какую-то ячейку справа.
 +
 
 +
Последовательность ячеек имеющих одинаковые частные называется пробегом (англ. ''run''). Возможно, что начало пробега не занимает канонический слот, если он уже занят каким-то другим пробегом. 
 +
 
 +
Пробег у которого первый элемент занимает каноническую ячейку является началом кластера. Кластер (англ. ''cluster'') {{---}} объединение последовательных пробегов, концом кластера является пустая ячейка или начало другого кластера.
 +
 
 +
Три дополнительных бита имеют следующие функции:
 +
# <tex>is</tex> <tex>occupied</tex> {{---}} равно единице, если ячейка является канонической для некого ключа в фильтре, сохраненого необязательно в этой ячейке.
 +
# <tex>is</tex> <tex>continuation</tex> {{---}} равно единице, если ячейка занята, но не первым элементов пробеге.
 +
# <tex>is</tex> <tex>shifted</tex> {{---}} равно единице, если пробег сдвинут относительно канонического слота.
 +
== Источники ==
 +
 
 +
* [http://en.wikipedia.org/wiki/Quotient_filter Quotient filter — Wikipedia]
 +
* [http://habrahabr.ru/post/242285/ Quotient filter — Habrahabr]
 +
[[Категория: Дискретная математика и алгоритмы ]]
 +
[[Категория: Хеширование]]

Версия 18:16, 6 июня 2015

Quotient filter

Определение:
Quotient filter — вероятностная структура данных, позволяющая проверить принадлежность элемента множеству. При этом существует возможность получить ложноположительное срабатывание (элемента в множестве нет, но структура данных сообщает, что он есть), но не ложноотрицательное.


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

Описание структуры данных

Фильтр представляет собой хеш таблицу в которой харанится часть ключа и 3 бита дополнительной информации. Они используются для разрешения ситуации, когда хеш различных ключей указывает на одну ячейку в хеш таблице. В [math]Quotient filter[/math] хеш функция возвращает [math]p[/math] битовый хеш, последние r бит которого называются остаток, а [math]q = p - r[/math] старших бит называются частное (англ. quotient), отсюда название структуры Quotient filter(придумано Кнутом в The Art of Computer Programming:Searching and Sorting, volume 3. Section 6.4, exercise 13). Размер хеш таблицы составляет 2^q.

Пусть у нас есть ключ [math]D[/math], его хеш обозначим [math]Dh[/math], остаток [math]Dr[/math] и частное [math]Dq[/math]. Попробуем поместить остаток в хеш таблицу в ячейку [math]Dq[/math], называемую канонической. Возможно ячейка уже занята, так как существует шанс полных коллизий (остаток и частное разных ключей совпадают) или частичных коллизий (частное разных ключей совпадают). Когда каноническая ячейка занята, помещаем остаток в какую-то ячейку справа.

Последовательность ячеек имеющих одинаковые частные называется пробегом (англ. run). Возможно, что начало пробега не занимает канонический слот, если он уже занят каким-то другим пробегом.

Пробег у которого первый элемент занимает каноническую ячейку является началом кластера. Кластер (англ. cluster) — объединение последовательных пробегов, концом кластера является пустая ячейка или начало другого кластера.

Три дополнительных бита имеют следующие функции:

  1. [math]is[/math] [math]occupied[/math] — равно единице, если ячейка является канонической для некого ключа в фильтре, сохраненого необязательно в этой ячейке.
  2. [math]is[/math] [math]continuation[/math] — равно единице, если ячейка занята, но не первым элементов пробеге.
  3. [math]is[/math] [math]shifted[/math] — равно единице, если пробег сдвинут относительно канонического слота.

Источники