Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 43e1cca

Browse files
Stulov Alextrekhleb
Stulov Alex
authored andcommittedMar 22, 2019
Translate Bloom filter into Russian. (trekhleb#320)
1 parent e286a92 commit 43e1cca

File tree

2 files changed

+59
-0
lines changed

2 files changed

+59
-0
lines changed
 

‎src/data-structures/bloom-filter/README.md

+3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
# Bloom Filter
22

3+
_Read this in other languages:_
4+
[_Русский_](README.ru-RU.md)
5+
36
A **bloom filter** is a space-efficient probabilistic
47
data structure designed to test whether an element
58
is present in a set. It is designed to be blazingly
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
# Фильтр Блума
2+
3+
**Фильтр Блума** - это пространственно-эффективная вероятностная структура данных, созданная для проверки наличия элемента
4+
в множестве. Он спроектирован невероятно быстрым при минимальном использовании памяти ценой потенциальных ложных срабатываний.
5+
Существует возможность получить ложноположительное срабатывание (элемента в множестве нет, но структура данных сообщает,
6+
что он есть), но не ложноотрицательное. Другими словами, очередь возвращает или "возможно в наборе", или "определённо не
7+
в наборе". Фильтр Блума может использовать любой объём памяти, однако чем он больше, тем меньше вероятность ложного
8+
срабатывания.
9+
10+
Блум предложил эту технику для применения в областях, где количество исходных данных потребовало бы непрактично много
11+
памяти, в случае применения условно безошибочных техник хеширования.
12+
13+
## Описание алгоритма
14+
15+
Пустой фильтр Блума представлен битовым массивом из `m` битов, все биты которого обнулены. Должно быть определено `k`
16+
независимых хеш-функций, отображающих каждый элемент множества в одну из `m` позиций в массиве, генерируя единообразное
17+
случайное распределение. Обычно `k` задана константой, которая много меньше `m` и пропорциональна
18+
количеству добавляемых элементов; точный выбор `k` и постоянной пропорциональности `m` определяются уровнем ложных
19+
срабатываний фильтра.
20+
21+
Вот пример Блум фильтра, представляющего набор `{x, y, z}`. Цветные стрелки показывают позиции в битовом массиве,
22+
которым привязан каждый элемент набора. Элемент `w` не в набора `{x, y, z}`, потому что он привязан к позиции в битовом
23+
массиве, равной `0`. Для этой формы , `m = 18`, а `k = 3`.
24+
25+
26+
Фильтр Блума представляет собой битовый массив из `m` бит. Изначально, когда структура данных хранит пустое множество, все
27+
`m` бит обнулены. Пользователь должен определить `k` независимых хеш-функций `h1`, …, `hk`,
28+
отображающих каждый элемент в одну из `m` позиций битового массива достаточно равномерным образом.
29+
30+
Для добавления элемента e необходимо записать единицы на каждую из позиций `h1(e)`, …, `hk(e)`
31+
битового массива.
32+
33+
Для проверки принадлежности элемента `e` к множеству хранимых элементов, необходимо проверить состояние битов
34+
`h1(e)`, …, `hk(e)`. Если хотя бы один из них равен нулю, элемент не может принадлежать множеству
35+
(иначе бы при его добавлении все эти биты были установлены). Если все они равны единице, то структура данных сообщает,
36+
что `е` принадлежит множеству. При этом может возникнуть две ситуации: либо элемент действительно принадлежит множеству,
37+
либо все эти биты оказались установлены по случайности при добавлении других элементов, что и является источником ложных
38+
срабатываний в этой структуре данных.
39+
40+
![Фильтр Блума](https://upload.wikimedia.org/wikipedia/commons/a/ac/Bloom_filter.svg)
41+
42+
## Применения
43+
44+
Фильтр Блума может быть использован для блогов. Если цель состоит в том, чтобы показать читателям только те статьи,
45+
которые они ещё не видели, фильтр блума идеален. Он может содержать хешированные значения, соответствующие статье. После
46+
того, как пользователь прочитал несколько статей, они могут быть помещены в фильтр. В следующий раз, когда пользователь
47+
посетит сайт, эти статьи могут быть убраны из результатов с помощью фильтра.
48+
49+
Некоторые статьи неизбежно будут отфильтрованы по ошибке, но цена приемлема. То, что пользователь не увидит несколько
50+
статей в полне приемлемо, принимая во внимание тот факт, что ему всегда показываются другие новые статьи при каждом
51+
новом посещении.
52+
53+
## Ссылки
54+
55+
- [Wikipedia](https://ru.wikipedia.org/wiki/%D0%A4%D0%B8%D0%BB%D1%8C%D1%82%D1%80_%D0%91%D0%BB%D1%83%D0%BC%D0%B0)
56+
- [Фильтр Блума на Хабре](https://habr.com/ru/post/112069/)

0 commit comments

Comments
 (0)
Please sign in to comment.