SlideShare ist ein Scribd-Unternehmen logo
1 von 87
Downloaden Sie, um offline zu lesen
Считаем уникальные
элементы
Константин Игнатов
7 ноября 2016
∙ Имеем поток элементов
∙
Хотим знать, сколько их было, без повторов
∙ Не хотим хранить поток целиком
Что ищем
2
SELECT COUNT DISTINCT . . .
∙ при оптимизации и планировании запросов к БД
∙ при оценке количества уникальных пар SRC-DST
в роутере
∙
при поиске паттернов в больших графах или
массивах данных
∙ при web-аналитике
Где нужно
3
U множество всех возможных элементов, n = |U|
S ⊂ U множество уникальных элементов в потоке
F0 = |S| количество элементов в этом множестве
ut ∈ S элемент на позиции t в потоке
Ut ⊂ S множество уникальных элементов, которые мы видели к моменту t
Считаем точно
4
∙
Сколько стоит добавить один элемент в
множество?
∙ сортированный список
∙ битовая маска из n = |U| бит
∙ Сколько стоит посчитать количество элементов?
∙
А если элементов много? Очень?
Считаем точно
4
∙ ˜F0 = (1 ± 𝜀) F0, 𝜀 > 0, 𝜀 ≪ 1
∙
Как гарантировать, что ошибка будет меньше 𝜀?
∙ Насколько меньше памяти можно использовать?
∙
Как быть?
Считаем приблизительно
5
∙ ˜F0 = (1 ± 𝜀) F0, 𝜀 > 0, 𝜀 ≪ 1
∙
Как гарантировать, что ошибка будет меньше 𝜀?
∙ Насколько меньше памяти можно использовать?
∙ Можно добиться линейного уменьшения
∙ Ценой экспоненциального увеличения ошибки
∙
Как быть?
Считаем приблизительно
5
1983 Flajolet, Martin Probabilistic Counting Algorithms for Data Base
Applications
1996 Alon, Matias, Szegedy The Space Complexity of Approximating the
Frequency Moments
2002 Bar-Yossef, Jayram, Kumar, Sivakumar, Trevisan Counting Distinct
Elements in a Data Stream
2003 Durand, Flajolet LogLog Counting of Large Cardinalities
2003 Indyk, Woodruff Tight Lower Bounds for the Distinct Elements Problem
State of art
6
2007 Flajolet, Fusy, Gandouet, Meunier HyperLogLog: the analysis of a
near-optimal cardinality estimation algorithm
2010 Kane, Nelson, Woodruff Optimal Algorithm for the Distinct Elements
Problem
2012 Helmi, Lumbroso, Martinez, Viola Data Streams as Random Permutations:
the Distinct Element Problem
State of art
6
∙ Кратко об этапах работы алгоритма
∙ Подробно об элементах алгоритмов
∙ Хэш-функции
∙
Разделение потока
∙
Статистики
∙
Подробно о том, почему всё это работает
План
7
bloom filter: встречался ли этот элемент в потоке?
heavy hiters: какие элементы встречались чаще всего?
F∞moment: как часто встречался самый распространённый элемент
online pattern discovery: какие элементы чаще всего встречались
вместе?
Связанные задачи
8
Bloom Filter
9
Bloom Filter
9
Bloom Filter
9
Bloom Filter
9
Bloom Filter
9
Bloom Filter
9
Sketch
10
Идея: храним не всю информацию, а только то, что необходимо для ответа
∙ В случае вероятностного алгоритма (вариант):
∙ Храним и обновляем несколько значений x,
вычисленных из увиденного потока
∙
E [f (x)] асимптотически равно оцениваемой
величине
∙ Var [f (x)] должно быть мало
Sketch
10
Sketch
10
Инициализация
(для 𝜀 = 0.32)
Выбрать большое простое число p, например 5247972723348490517
Выбрать три функции, например:
h(x) = (3813295331020233847x + 2061310418014472126) mod p
g1(x) = (4905134244493838961x + 339751972700966608) mod p mod 1000
g2(x) = (3462845419123084402x3+2920301559511116865x2+4398447080453503003x+
1489413524815015911) mod p mod 10
Создать сжатый массив C из m = 10 элементов, равных 0.
Вариант алгоритма
11
Для каждого объекта x
1 r = lsb (h(x)) — количество нулей справа в
бинарном представлении хеша + 1
2 i = g(x)
3 C[i] = max (C[i], r)
Вариант алгоритма
11
Получение результата
1 r = min(C)
2 T — количество элементов в C, которые больше r
3 Ответ: 2r+1log(1−T
m )
log(1− 1
m )
Вариант алгоритма
11
∙ Будем рассматривать алгоритм, который:
∙
Отвечает с некоторой точностью 𝜀
F0,𝜀 = F0 · (1 ± 𝜀)
∙ Может ответить с большей ошибкой с
вероятностью (1 − 𝛿) < 1
2
(𝜀, 𝛿)-аппроксимация
Вероятностные алгоритмы
12
∙
Вероятность ошибки: 𝛿 < 1
2
∙
Вероятность не допустить ошибку: 1 − 𝛿 > 1
2
∙ При R повторах:
∙ Биноминальное распределение
∙
Нужно R
2 + 1 или больше верных ответов
∙
R∑︀
i=R
2 +1
(︀R
i
)︀
(1 − 𝛿)i
𝛿R−i
Уменьшение вероятности ошибки
13
h : U → {0, 1, 2, 3, . . . , m − 1}
или
h : U →
{︂
0,
1
m
,
2
m
,
3
m
, . . . , 1
}︂
как правило, m |U|
∙
В современных реализациях потоковых
алгоритмов, как правило:
∙
log m = 64 (64-битные хэш-функции).
Хэш-функции
14
∙ Теоретически нам нужно, чтобы вероятность
увидеть любой элемент была одинаковой
∙
На практике так не бывает
∙ Используем хэш-функции (теория):
∙ вероятность встретить определённый хэш 1
m
∙ даже если исходные объекты «скучкованны»
Хэш-функции и случайные величины
15
∙ Абсолютно случайная хэш-функция:
∙ Для каждого элемента в U генерируем
случайное число от 0 до m
∙
Храним n = |U| хэшей в массиве (векторе)
∙
O (n log m) места в памяти
∙
Часто нам нужно несколько хэш-функций...
Память для хэш-функций
16
∙ На практике:
∙ используется быстрая детерминистическая
функция от нескольких переменных
∙
фиксируются все переменные кроме одной
∙ нужно хранить только параметры функции
∙ как правило,O (log m)
Память для хэш-функций
16
Хэш-функции
17
Хэш-функции
17
Хэш-функции
17
Хэш-функции
17
Хэш-функции
17
Хэш-функции
17
435839x + 117959 mod 567857
Хэш-функции
17
Хэш-функции
17
Хэш-функции
17
Хэш-функции
17
Хэш-функции
17
Хэш-функции
17
Хэш-функции
17
∙ При абсолютно случайной хэш-функции все
значения не зависят друг от друга:
Pr (h (x1) = c1, h (x2) = c2, . . . , h (xm) = cm) = 1
mm
∀
{︀
ci ∈ 0, m − 1
}︀
Семейства хэш-функций
18
∙ На практике нам достаточно независимости
только для небольшого числа хэшей k
∙ Выбираем хэш-функцию случайно из
некоторого семейства H
∙ например, для k = 2,(ax + b) mod p mod m,
0 < a < p, 0 b < p:
Pr
h∈H
(h (x1) = c1 ∧ h (x2) = c2) = 1
m2
∀x1, x2 ∈ U, ∀c1, c2 ∈ 0, m − 1
Семейства хэш-функций
18
∙ Для произвольного k
h (x) =
[︂(︂k−1∑︀
i=0
aixi
)︂
mod p
]︂
mod m
Pr (h (x1) = c1 ∧ h (x2) = c2 ∧ . . . ∧ h (xk) = ck) = 1
mk
∀x1 . . . xk ∈ U, ∀c1, . . . ck ∈ 0, m − 1
Семейства хэш-функций
18
∙ Вероятность верного ответа (1 − 𝛿) и память
∙ Вероятность и сложность (время выполнения)
∙ Точность 𝜀 и память:
∙ теоретически 𝜀 = 1√
M
∙
M — количество используемых хэш-функций
Компромиссы
19
∙ В некоторый момент переключаем выполнение
алгоритма с одного исполнителя (Алиса) к
другому (Боб)
∙ Алиса при этом должна отправить Бобу
сообщение. Дальше поток видит только Боб
∙ В конце Боб должен сказать, сколько было
элементов в потоке с (𝜀, 𝛿) аппроксимацией
∙ Размер сообщения и есть потребление памяти
Теоретическое потребление памяти
20
∙
Теоретический предел: O
(︀ 1
𝜀2 + log n
)︀
∙
Наиболее распространённый на практике
алгоритм: O
(︀ 1
𝜀2 log log n
)︀
n = |U| — количество возможных объектов (e.g. 264)
log n — количество бит в бинарном представлении n (e.g. 64)
log log n — количество бит, нужных для записи количества бит в n (e.g. 6)
Теоретическое потребление памяти
20
Сколько элементов в bloom-фильтре?
21
Сколько элементов в bloom-фильтре?
21
Сколько элементов в bloom-фильтре?
21
Сколько элементов в bloom-фильтре?
21
Переделываем bloom
22
Переделываем bloom
22
Переделываем bloom
22
∙ Сколько чисел из 0, m имеют
∙ k нулей в конце бинарного представления?
∙
k нулей в начале?
∙ k нулей или единиц подряд?
Вероятность «редкой птицы»
23
Pr (0 zeros) = 1
2
Pr (1 zero) = 1
2
Pr(2 zeros) = 1
4
Pr(k zeros) = 1
2k
Вероятность «редкой птицы»
23
Pr (0 zeros) = 1
2
Pr (1 zero) = 1
2
Pr(2 zeros) = 1
4
Pr(k zeros) = 1
2k
∙
А после N увиденных
элементов?
Вероятность «редкой птицы»
23
Pr (0 zeros) = 1
2
Pr (1 zero) = 1
2
Pr(2 zeros) = 1
4
Pr(k zeros) = 1
2k
∙
А после N увиденных
элементов?
∙
1 −
(︀
1 − 1
2k
)︀N
Вероятность «редкой птицы»
23
∙ Итого: в «сломанном» bloom-фильтре примерно
2r
𝜑 элементов
∙ r — номер первого бита 1 справа
∙
𝜑 — константа
∙ Нужно объединить результаты нескольких
экспериментов (иначе будут ответы, кратные
степеням 2)
Вероятность «редкой птицы»
23
𝜑 = 2−1
2 e 𝛾 2
3
∞∏︁
𝜌=1
[︂
(4𝜌 + 1)(4𝜌 + 2)
(4𝜌)(4𝜌 + 3)
]︂(−1) 𝜈(𝜌)
≈ 0.77351
𝜈(𝜌) — количество 1-бит в бинарном представлении 𝜌
𝛾 = −
∞´
0
ln x
ex dx — постоянная Эйлера
Интересная константа
24
∙ Плохо: ответы, кратные степеням 2
∙
Плохо: высокий разброс ошибки
∙ Хотим провести M независимых экспериментов,
не дублируя поток
∙
Заводим M корзинок и раскладываем элементы в
них при помощи ещё одной хэш-функции
∙ как при балансировке нагрузки
∙ одинаковые элементы всегда попадают в один
«подпоток»
Разделение потока
25
∙ NB: Первые элементы (K ∼ m) потока:
∙ NB: Сколько останется пустых корзинок?
∙ Pr (bi) = 1
m Pr (∼ bi) =
(︀
1 − 1
m
)︀
∙ Pr (∼ bi after K) =
(︀
1 − 1
m
)︀K
∙ Pr (bi after K) = 1 −
(︀
1 − 1
m
)︀K
∙ Все корзинки одинаковые:
E (emty) = m
(︁
1 −
(︀
1 − 1
m
)︀K
)︁
Разделение потока
25
∙ применяем «сломанный bloom-фильтр» для
каждой корзинки, считаем среднее
∙ Точность: 𝜀 = 0.78√
M
∙
Память: O
(︀ 1
𝜀2 log n
)︀
∙ Заменив арифметическое среднее на
гармоническое, получим 𝜀 = 1.02√
M
Разделение потока
25
∙ Нам не нужно хранить сами значения в
«регистрах»
∙ Достаточно индекса нужного бита
∙
вот тут и получается O
(︀ 1
𝜀2 log log n
)︀
Наблюдение 1
26
∙ В получившемся массиве почти все числа будут
одинаковыми
∙
Можно хранить минимальное значение отдельно,
а остальное — сжать
∙ Существуют компактные структуры данных с
быстрым обновлением и запросами
∙ Память: O (sum (C)) (на практике: 3–4 1
𝜀2 )
∙ E (#bucket ≈ log F0) = m
(︁
1 −
(︀
1 − 1
m
)︀F0
)︁
∙
остаётся выразить F0
Наблюдение 2
27
∙
Храним sketch за каждые несколько секунд
∙
При запросе объединяем все затронутые
интервалы
∙ учитываем, что min хранится отдельно
∙
Запускаем последний шаг алгоритма
∙ Можем получить оценку не только за
произвольный интервал времени,
∙ но и за объединение любых произвольных
интервалов
Я всё-таки хочу знать...
28
Redis
∙ Специальная структура данных
∙
Специальные команды для этой
структуры
∙ Удобно для работы с небольшим
количеством множеств
Реализации
29
Clickhouse
∙ Умеет делать запросы с использованием
вероятностных алгоритмов
∙
По-умолчанию uniq() использует
вероятностный алгоритм
∙ Понятие состояния алгоритма и
специальный тип данных
Реализации
29
Спасибо
Константин Игнатов
@podshumok
kv@qrator.net
2r (r — количество 1 в конце слова x):
0 1 0 1 0 1 1 1 x
1 0 1 0 1 0 0 0 ∼ x
0 1 0 1 1 0 0 0 x + 1
0 0 0 0 1 0 0 0 ∼ x& (x + 1) = 2r
Bit tricks
31
x mod y (нам не нужен результат деления)
∙
x % p = ( x >> 61) + ( x & p)
(если p = 261
− 1)
∙
( ( uint128 ) x * ( uint128 )p ) >> 64
Bit tricks
31
CRC
CLMUL
POPCNT
Bit tricks
31
Порядковая статистика
32
Порядковая статистика
32
Порядковая статистика
32
Порядковая статистика
32
Порядковая статистика
32
Порядковая статистика
32
Порядковая статистика
32
Порядковая статистика
32
Порядковая статистика
32
Порядковая статистика
32
Порядковая статистика
32
Порядковая статистика
32
Порядковая статистика
32
Порядковая статистика
32

Weitere ähnliche Inhalte

Was ist angesagt?

Семинар 4. Многопоточное программирование на OpenMP (часть 4)
Семинар 4. Многопоточное программирование на OpenMP (часть 4)Семинар 4. Многопоточное программирование на OpenMP (часть 4)
Семинар 4. Многопоточное программирование на OpenMP (часть 4)Mikhail Kurnosov
 
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...Alexey Paznikov
 
Семинар 3. Многопоточное программирование на OpenMP (часть 3)
Семинар 3. Многопоточное программирование на OpenMP (часть 3)Семинар 3. Многопоточное программирование на OpenMP (часть 3)
Семинар 3. Многопоточное программирование на OpenMP (часть 3)Mikhail Kurnosov
 
Лекция 1. Амортизационный анализ (amortized analysis)
Лекция 1. Амортизационный анализ (amortized analysis)Лекция 1. Амортизационный анализ (amortized analysis)
Лекция 1. Амортизационный анализ (amortized analysis)Mikhail Kurnosov
 
Семинар 1. Многопоточное программирование на OpenMP (часть 1)
Семинар 1. Многопоточное программирование на OpenMP (часть 1)Семинар 1. Многопоточное программирование на OpenMP (часть 1)
Семинар 1. Многопоточное программирование на OpenMP (часть 1)Mikhail Kurnosov
 
Хочу знать, сколько уникальных посетителей было на моём сайте за произвольный...
Хочу знать, сколько уникальных посетителей было на моём сайте за произвольный...Хочу знать, сколько уникальных посетителей было на моём сайте за произвольный...
Хочу знать, сколько уникальных посетителей было на моём сайте за произвольный...Ontico
 
Лекция 4: Стек. Очередь
Лекция 4: Стек. ОчередьЛекция 4: Стек. Очередь
Лекция 4: Стек. ОчередьMikhail Kurnosov
 
Векторизация кода (семинар 1)
Векторизация кода (семинар 1)Векторизация кода (семинар 1)
Векторизация кода (семинар 1)Mikhail Kurnosov
 
Лекция 12. Вероятностный анализ и рандомизированные алгоритмы (Randomized al...
Лекция 12. Вероятностный анализ и рандомизированные алгоритмы (Randomized al...Лекция 12. Вероятностный анализ и рандомизированные алгоритмы (Randomized al...
Лекция 12. Вероятностный анализ и рандомизированные алгоритмы (Randomized al...Mikhail Kurnosov
 
Лекция 1. Анализ эффективности алгоритмов
Лекция 1. Анализ эффективности алгоритмовЛекция 1. Анализ эффективности алгоритмов
Лекция 1. Анализ эффективности алгоритмовMikhail Kurnosov
 
Алгоритмы и структуры данных весна 2014 лекция 1
Алгоритмы и структуры данных весна 2014 лекция 1Алгоритмы и структуры данных весна 2014 лекция 1
Алгоритмы и структуры данных весна 2014 лекция 1Technopark
 
Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)Mikhail Kurnosov
 
Лекция 7. Стандарт OpenMP (подолжение)
Лекция 7. Стандарт OpenMP (подолжение)Лекция 7. Стандарт OpenMP (подолжение)
Лекция 7. Стандарт OpenMP (подолжение)Mikhail Kurnosov
 
Семинар 7. Многопоточное программирование на OpenMP (часть 7)
Семинар 7. Многопоточное программирование на OpenMP (часть 7)Семинар 7. Многопоточное программирование на OpenMP (часть 7)
Семинар 7. Многопоточное программирование на OpenMP (часть 7)Mikhail Kurnosov
 
Лекция 1. Амортизационный анализ (Amortized analysis)
Лекция 1. Амортизационный анализ (Amortized analysis)Лекция 1. Амортизационный анализ (Amortized analysis)
Лекция 1. Амортизационный анализ (Amortized analysis)Mikhail Kurnosov
 
Лекция 7. Бинарные кучи. Пирамидальная сортировка
Лекция 7. Бинарные кучи. Пирамидальная сортировкаЛекция 7. Бинарные кучи. Пирамидальная сортировка
Лекция 7. Бинарные кучи. Пирамидальная сортировкаMikhail Kurnosov
 
Лекция 11. Методы разработки алгоритмов
Лекция 11. Методы разработки алгоритмовЛекция 11. Методы разработки алгоритмов
Лекция 11. Методы разработки алгоритмовMikhail Kurnosov
 

Was ist angesagt? (20)

Семинар 4. Многопоточное программирование на OpenMP (часть 4)
Семинар 4. Многопоточное программирование на OpenMP (часть 4)Семинар 4. Многопоточное программирование на OpenMP (часть 4)
Семинар 4. Многопоточное программирование на OpenMP (часть 4)
 
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
 
Семинар 3. Многопоточное программирование на OpenMP (часть 3)
Семинар 3. Многопоточное программирование на OpenMP (часть 3)Семинар 3. Многопоточное программирование на OpenMP (часть 3)
Семинар 3. Многопоточное программирование на OpenMP (часть 3)
 
Лекция 1. Амортизационный анализ (amortized analysis)
Лекция 1. Амортизационный анализ (amortized analysis)Лекция 1. Амортизационный анализ (amortized analysis)
Лекция 1. Амортизационный анализ (amortized analysis)
 
Семинар 1. Многопоточное программирование на OpenMP (часть 1)
Семинар 1. Многопоточное программирование на OpenMP (часть 1)Семинар 1. Многопоточное программирование на OpenMP (часть 1)
Семинар 1. Многопоточное программирование на OpenMP (часть 1)
 
Reactive extensions
Reactive extensionsReactive extensions
Reactive extensions
 
01 вводная
01 вводная01 вводная
01 вводная
 
Хочу знать, сколько уникальных посетителей было на моём сайте за произвольный...
Хочу знать, сколько уникальных посетителей было на моём сайте за произвольный...Хочу знать, сколько уникальных посетителей было на моём сайте за произвольный...
Хочу знать, сколько уникальных посетителей было на моём сайте за произвольный...
 
Лекция 4: Стек. Очередь
Лекция 4: Стек. ОчередьЛекция 4: Стек. Очередь
Лекция 4: Стек. Очередь
 
Векторизация кода (семинар 1)
Векторизация кода (семинар 1)Векторизация кода (семинар 1)
Векторизация кода (семинар 1)
 
Лекция 12. Вероятностный анализ и рандомизированные алгоритмы (Randomized al...
Лекция 12. Вероятностный анализ и рандомизированные алгоритмы (Randomized al...Лекция 12. Вероятностный анализ и рандомизированные алгоритмы (Randomized al...
Лекция 12. Вероятностный анализ и рандомизированные алгоритмы (Randomized al...
 
Лекция 1. Анализ эффективности алгоритмов
Лекция 1. Анализ эффективности алгоритмовЛекция 1. Анализ эффективности алгоритмов
Лекция 1. Анализ эффективности алгоритмов
 
Алгоритмы и структуры данных весна 2014 лекция 1
Алгоритмы и структуры данных весна 2014 лекция 1Алгоритмы и структуры данных весна 2014 лекция 1
Алгоритмы и структуры данных весна 2014 лекция 1
 
Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)
 
Лекция 7. Стандарт OpenMP (подолжение)
Лекция 7. Стандарт OpenMP (подолжение)Лекция 7. Стандарт OpenMP (подолжение)
Лекция 7. Стандарт OpenMP (подолжение)
 
Семинар 7. Многопоточное программирование на OpenMP (часть 7)
Семинар 7. Многопоточное программирование на OpenMP (часть 7)Семинар 7. Многопоточное программирование на OpenMP (часть 7)
Семинар 7. Многопоточное программирование на OpenMP (часть 7)
 
Лекция 1. Амортизационный анализ (Amortized analysis)
Лекция 1. Амортизационный анализ (Amortized analysis)Лекция 1. Амортизационный анализ (Amortized analysis)
Лекция 1. Амортизационный анализ (Amortized analysis)
 
Лекция 7. Бинарные кучи. Пирамидальная сортировка
Лекция 7. Бинарные кучи. Пирамидальная сортировкаЛекция 7. Бинарные кучи. Пирамидальная сортировка
Лекция 7. Бинарные кучи. Пирамидальная сортировка
 
Лекция 11. Методы разработки алгоритмов
Лекция 11. Методы разработки алгоритмовЛекция 11. Методы разработки алгоритмов
Лекция 11. Методы разработки алгоритмов
 
SciPy
SciPySciPy
SciPy
 

Andere mochten auch

ReqLabs PechaKucha Евгений Сафроненко
ReqLabs PechaKucha Евгений СафроненкоReqLabs PechaKucha Евгений Сафроненко
ReqLabs PechaKucha Евгений СафроненкоPechaKucha Ukraine
 
HyperLogLog in Hive - How to count sheep efficiently?
HyperLogLog in Hive - How to count sheep efficiently?HyperLogLog in Hive - How to count sheep efficiently?
HyperLogLog in Hive - How to count sheep efficiently?bzamecnik
 
Probabilistic data structures
Probabilistic data structuresProbabilistic data structures
Probabilistic data structuresshrinivasvasala
 
Big Data Day LA 2015 - Large Scale Distinct Count -- The HyperLogLog algorith...
Big Data Day LA 2015 - Large Scale Distinct Count -- The HyperLogLog algorith...Big Data Day LA 2015 - Large Scale Distinct Count -- The HyperLogLog algorith...
Big Data Day LA 2015 - Large Scale Distinct Count -- The HyperLogLog algorith...Data Con LA
 
Probabilistic data structures. Part 2. Cardinality
Probabilistic data structures. Part 2. CardinalityProbabilistic data structures. Part 2. Cardinality
Probabilistic data structures. Part 2. CardinalityAndrii Gakhov
 
Using Simplicity to Make Hard Big Data Problems Easy
Using Simplicity to Make Hard Big Data Problems EasyUsing Simplicity to Make Hard Big Data Problems Easy
Using Simplicity to Make Hard Big Data Problems Easynathanmarz
 
Hyper loglog
Hyper loglogHyper loglog
Hyper loglognybon
 
Deep dive into Coroutines on JVM @ KotlinConf 2017
Deep dive into Coroutines on JVM @ KotlinConf 2017Deep dive into Coroutines on JVM @ KotlinConf 2017
Deep dive into Coroutines on JVM @ KotlinConf 2017Roman Elizarov
 

Andere mochten auch (9)

Big Data aggregation techniques
Big Data aggregation techniquesBig Data aggregation techniques
Big Data aggregation techniques
 
ReqLabs PechaKucha Евгений Сафроненко
ReqLabs PechaKucha Евгений СафроненкоReqLabs PechaKucha Евгений Сафроненко
ReqLabs PechaKucha Евгений Сафроненко
 
HyperLogLog in Hive - How to count sheep efficiently?
HyperLogLog in Hive - How to count sheep efficiently?HyperLogLog in Hive - How to count sheep efficiently?
HyperLogLog in Hive - How to count sheep efficiently?
 
Probabilistic data structures
Probabilistic data structuresProbabilistic data structures
Probabilistic data structures
 
Big Data Day LA 2015 - Large Scale Distinct Count -- The HyperLogLog algorith...
Big Data Day LA 2015 - Large Scale Distinct Count -- The HyperLogLog algorith...Big Data Day LA 2015 - Large Scale Distinct Count -- The HyperLogLog algorith...
Big Data Day LA 2015 - Large Scale Distinct Count -- The HyperLogLog algorith...
 
Probabilistic data structures. Part 2. Cardinality
Probabilistic data structures. Part 2. CardinalityProbabilistic data structures. Part 2. Cardinality
Probabilistic data structures. Part 2. Cardinality
 
Using Simplicity to Make Hard Big Data Problems Easy
Using Simplicity to Make Hard Big Data Problems EasyUsing Simplicity to Make Hard Big Data Problems Easy
Using Simplicity to Make Hard Big Data Problems Easy
 
Hyper loglog
Hyper loglogHyper loglog
Hyper loglog
 
Deep dive into Coroutines on JVM @ KotlinConf 2017
Deep dive into Coroutines on JVM @ KotlinConf 2017Deep dive into Coroutines on JVM @ KotlinConf 2017
Deep dive into Coroutines on JVM @ KotlinConf 2017
 

Ähnlich wie Анализ количества посетителей на сайте [Считаем уникальные элементы]

Алгоритмы и структуры данных осень 2013 лекция 1
Алгоритмы и структуры данных осень 2013 лекция 1Алгоритмы и структуры данных осень 2013 лекция 1
Алгоритмы и структуры данных осень 2013 лекция 1Technopark
 
Обработка коллекций. Единая суть и множество проявлений
Обработка коллекций. Единая суть и множество проявленийОбработка коллекций. Единая суть и множество проявлений
Обработка коллекций. Единая суть и множество проявленийcorehard_by
 
C++ CoreHard Autumn 2018. Обработка списков на C++ в функциональном стиле - В...
C++ CoreHard Autumn 2018. Обработка списков на C++ в функциональном стиле - В...C++ CoreHard Autumn 2018. Обработка списков на C++ в функциональном стиле - В...
C++ CoreHard Autumn 2018. Обработка списков на C++ в функциональном стиле - В...corehard_by
 
DUMP-2013 Наука и жизнь - Приближённый подсчёт количества уникальных элементо...
DUMP-2013 Наука и жизнь - Приближённый подсчёт количества уникальных элементо...DUMP-2013 Наука и жизнь - Приближённый подсчёт количества уникальных элементо...
DUMP-2013 Наука и жизнь - Приближённый подсчёт количества уникальных элементо...it-people
 
Вероятностные структуры данных
Вероятностные структуры данныхВероятностные структуры данных
Вероятностные структуры данныхAndrii Gakhov
 
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...Ontico
 
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНСit-people
 
Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...
Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...
Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...Alexey Paznikov
 
Обработка данных в RTB: быстро, дешево и на 98% точно
Обработка данных в RTB:  быстро, дешево и на 98% точноОбработка данных в RTB:  быстро, дешево и на 98% точно
Обработка данных в RTB: быстро, дешево и на 98% точноPavel Kalaidin
 
Многопоточное Программирование - Теория и Практика
Многопоточное Программирование - Теория и ПрактикаМногопоточное Программирование - Теория и Практика
Многопоточное Программирование - Теория и ПрактикаRoman Elizarov
 
Евгений Лазин. Неизменяемая структура данных HAMT для создания БД в памяти
Евгений Лазин. Неизменяемая структура данных HAMT для создания БД в памятиЕвгений Лазин. Неизменяемая структура данных HAMT для создания БД в памяти
Евгений Лазин. Неизменяемая структура данных HAMT для создания БД в памятиFProg
 
Haskell Type System with Dzmitry Ivashnev.
Haskell Type System with Dzmitry Ivashnev.Haskell Type System with Dzmitry Ivashnev.
Haskell Type System with Dzmitry Ivashnev.Sergey Tihon
 
Многопоточные Алгоритмы (для BitByte 2014)
Многопоточные Алгоритмы (для BitByte 2014)Многопоточные Алгоритмы (для BitByte 2014)
Многопоточные Алгоритмы (для BitByte 2014)Roman Elizarov
 
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 3...
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 3...PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 3...
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 3...pgdayrussia
 
Лекция 6. Параллельная сортировка. Алгоритмы комбинаторного поиска. Параллель...
Лекция 6. Параллельная сортировка. Алгоритмы комбинаторного поиска. Параллель...Лекция 6. Параллельная сортировка. Алгоритмы комбинаторного поиска. Параллель...
Лекция 6. Параллельная сортировка. Алгоритмы комбинаторного поиска. Параллель...Alexey Paznikov
 
Hash cse lecture2
Hash cse lecture2Hash cse lecture2
Hash cse lecture2LiloSEA
 

Ähnlich wie Анализ количества посетителей на сайте [Считаем уникальные элементы] (20)

Алгоритмы и структуры данных осень 2013 лекция 1
Алгоритмы и структуры данных осень 2013 лекция 1Алгоритмы и структуры данных осень 2013 лекция 1
Алгоритмы и структуры данных осень 2013 лекция 1
 
Обработка коллекций. Единая суть и множество проявлений
Обработка коллекций. Единая суть и множество проявленийОбработка коллекций. Единая суть и множество проявлений
Обработка коллекций. Единая суть и множество проявлений
 
C++ CoreHard Autumn 2018. Обработка списков на C++ в функциональном стиле - В...
C++ CoreHard Autumn 2018. Обработка списков на C++ в функциональном стиле - В...C++ CoreHard Autumn 2018. Обработка списков на C++ в функциональном стиле - В...
C++ CoreHard Autumn 2018. Обработка списков на C++ в функциональном стиле - В...
 
DUMP-2013 Наука и жизнь - Приближённый подсчёт количества уникальных элементо...
DUMP-2013 Наука и жизнь - Приближённый подсчёт количества уникальных элементо...DUMP-2013 Наука и жизнь - Приближённый подсчёт количества уникальных элементо...
DUMP-2013 Наука и жизнь - Приближённый подсчёт количества уникальных элементо...
 
Вероятностные структуры данных
Вероятностные структуры данныхВероятностные структуры данных
Вероятностные структуры данных
 
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
 
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
 
Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...
Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...
Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...
 
Обработка данных в RTB: быстро, дешево и на 98% точно
Обработка данных в RTB:  быстро, дешево и на 98% точноОбработка данных в RTB:  быстро, дешево и на 98% точно
Обработка данных в RTB: быстро, дешево и на 98% точно
 
Многопоточное Программирование - Теория и Практика
Многопоточное Программирование - Теория и ПрактикаМногопоточное Программирование - Теория и Практика
Многопоточное Программирование - Теория и Практика
 
Евгений Лазин. Неизменяемая структура данных HAMT для создания БД в памяти
Евгений Лазин. Неизменяемая структура данных HAMT для создания БД в памятиЕвгений Лазин. Неизменяемая структура данных HAMT для создания БД в памяти
Евгений Лазин. Неизменяемая структура данных HAMT для создания БД в памяти
 
Purely practical data structures
Purely practical data structuresPurely practical data structures
Purely practical data structures
 
Haskell Type System with Dzmitry Ivashnev.
Haskell Type System with Dzmitry Ivashnev.Haskell Type System with Dzmitry Ivashnev.
Haskell Type System with Dzmitry Ivashnev.
 
Многопоточные Алгоритмы (для BitByte 2014)
Многопоточные Алгоритмы (для BitByte 2014)Многопоточные Алгоритмы (для BitByte 2014)
Многопоточные Алгоритмы (для BitByte 2014)
 
Рекурсия. Поиск
Рекурсия. ПоискРекурсия. Поиск
Рекурсия. Поиск
 
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 3...
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 3...PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 3...
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 3...
 
Лекция 6. Параллельная сортировка. Алгоритмы комбинаторного поиска. Параллель...
Лекция 6. Параллельная сортировка. Алгоритмы комбинаторного поиска. Параллель...Лекция 6. Параллельная сортировка. Алгоритмы комбинаторного поиска. Параллель...
Лекция 6. Параллельная сортировка. Алгоритмы комбинаторного поиска. Параллель...
 
4 algoritm
4 algoritm4 algoritm
4 algoritm
 
Алгоритм
АлгоритмАлгоритм
Алгоритм
 
Hash cse lecture2
Hash cse lecture2Hash cse lecture2
Hash cse lecture2
 

Mehr von Qrator Labs

Годовой отчет Qrator Labs об угрозах интернета 2017
Годовой отчет Qrator Labs об угрозах интернета 2017Годовой отчет Qrator Labs об угрозах интернета 2017
Годовой отчет Qrator Labs об угрозах интернета 2017Qrator Labs
 
Qrator Labs annual report 2017
Qrator Labs annual report 2017Qrator Labs annual report 2017
Qrator Labs annual report 2017Qrator Labs
 
Memcached amplification DDoS: a 2018 threat.
Memcached amplification DDoS: a 2018 threat. Memcached amplification DDoS: a 2018 threat.
Memcached amplification DDoS: a 2018 threat. Qrator Labs
 
DNS Survival Guide.
DNS Survival Guide.DNS Survival Guide.
DNS Survival Guide.Qrator Labs
 
BGP Flexibility and its Consequences.
BGP Flexibility and its Consequences. BGP Flexibility and its Consequences.
BGP Flexibility and its Consequences. Qrator Labs
 
BGP Route Leaks at Ripe74
BGP Route Leaks at Ripe74BGP Route Leaks at Ripe74
BGP Route Leaks at Ripe74Qrator Labs
 
IoT: реальная угроза или маркетинг?
IoT: реальная угроза или маркетинг?IoT: реальная угроза или маркетинг?
IoT: реальная угроза или маркетинг?Qrator Labs
 
Network Security in 2016
Network Security in 2016Network Security in 2016
Network Security in 2016Qrator Labs
 
Состояние сетевой безопасности в 2016 году
Состояние сетевой безопасности в 2016 году Состояние сетевой безопасности в 2016 году
Состояние сетевой безопасности в 2016 году Qrator Labs
 
Сколько стоит доступ в память, и что с этим делать
Сколько стоит доступ в память, и что с этим делатьСколько стоит доступ в память, и что с этим делать
Сколько стоит доступ в память, и что с этим делатьQrator Labs
 
Caution i pv6 is here
Caution i pv6 is hereCaution i pv6 is here
Caution i pv6 is hereQrator Labs
 
Масштабируя TLS
Масштабируя TLSМасштабируя TLS
Масштабируя TLSQrator Labs
 
ISP Border Definition
ISP Border DefinitionISP Border Definition
ISP Border DefinitionQrator Labs
 
DDoS Attacks in 2017: Beyond Packet Filtering
DDoS Attacks in 2017: Beyond Packet FilteringDDoS Attacks in 2017: Beyond Packet Filtering
DDoS Attacks in 2017: Beyond Packet FilteringQrator Labs
 
Internet Roads of Caucasus
Internet Roads of CaucasusInternet Roads of Caucasus
Internet Roads of CaucasusQrator Labs
 
Latency i pv4 vs ipv6
Latency i pv4 vs ipv6Latency i pv4 vs ipv6
Latency i pv4 vs ipv6Qrator Labs
 
Особенности использования машинного обучения при защите от DDoS-атак
Особенности использования машинного обучения при защите от DDoS-атакОсобенности использования машинного обучения при защите от DDoS-атак
Особенности использования машинного обучения при защите от DDoS-атакQrator Labs
 
Финансовый сектор. Аспекты информационной безопасности 2016
Финансовый сектор. Аспекты информационной безопасности 2016Финансовый сектор. Аспекты информационной безопасности 2016
Финансовый сектор. Аспекты информационной безопасности 2016Qrator Labs
 
White Paper. Эволюция DDoS-атак и средств противодействия данной угрозе
White Paper. Эволюция DDoS-атак и средств противодействия данной угрозеWhite Paper. Эволюция DDoS-атак и средств противодействия данной угрозе
White Paper. Эволюция DDoS-атак и средств противодействия данной угрозеQrator Labs
 
Тренды 2015 года в области интернет-безопасности в россии и в мире
Тренды 2015 года в области интернет-безопасности в россии и в миреТренды 2015 года в области интернет-безопасности в россии и в мире
Тренды 2015 года в области интернет-безопасности в россии и в миреQrator Labs
 

Mehr von Qrator Labs (20)

Годовой отчет Qrator Labs об угрозах интернета 2017
Годовой отчет Qrator Labs об угрозах интернета 2017Годовой отчет Qrator Labs об угрозах интернета 2017
Годовой отчет Qrator Labs об угрозах интернета 2017
 
Qrator Labs annual report 2017
Qrator Labs annual report 2017Qrator Labs annual report 2017
Qrator Labs annual report 2017
 
Memcached amplification DDoS: a 2018 threat.
Memcached amplification DDoS: a 2018 threat. Memcached amplification DDoS: a 2018 threat.
Memcached amplification DDoS: a 2018 threat.
 
DNS Survival Guide.
DNS Survival Guide.DNS Survival Guide.
DNS Survival Guide.
 
BGP Flexibility and its Consequences.
BGP Flexibility and its Consequences. BGP Flexibility and its Consequences.
BGP Flexibility and its Consequences.
 
BGP Route Leaks at Ripe74
BGP Route Leaks at Ripe74BGP Route Leaks at Ripe74
BGP Route Leaks at Ripe74
 
IoT: реальная угроза или маркетинг?
IoT: реальная угроза или маркетинг?IoT: реальная угроза или маркетинг?
IoT: реальная угроза или маркетинг?
 
Network Security in 2016
Network Security in 2016Network Security in 2016
Network Security in 2016
 
Состояние сетевой безопасности в 2016 году
Состояние сетевой безопасности в 2016 году Состояние сетевой безопасности в 2016 году
Состояние сетевой безопасности в 2016 году
 
Сколько стоит доступ в память, и что с этим делать
Сколько стоит доступ в память, и что с этим делатьСколько стоит доступ в память, и что с этим делать
Сколько стоит доступ в память, и что с этим делать
 
Caution i pv6 is here
Caution i pv6 is hereCaution i pv6 is here
Caution i pv6 is here
 
Масштабируя TLS
Масштабируя TLSМасштабируя TLS
Масштабируя TLS
 
ISP Border Definition
ISP Border DefinitionISP Border Definition
ISP Border Definition
 
DDoS Attacks in 2017: Beyond Packet Filtering
DDoS Attacks in 2017: Beyond Packet FilteringDDoS Attacks in 2017: Beyond Packet Filtering
DDoS Attacks in 2017: Beyond Packet Filtering
 
Internet Roads of Caucasus
Internet Roads of CaucasusInternet Roads of Caucasus
Internet Roads of Caucasus
 
Latency i pv4 vs ipv6
Latency i pv4 vs ipv6Latency i pv4 vs ipv6
Latency i pv4 vs ipv6
 
Особенности использования машинного обучения при защите от DDoS-атак
Особенности использования машинного обучения при защите от DDoS-атакОсобенности использования машинного обучения при защите от DDoS-атак
Особенности использования машинного обучения при защите от DDoS-атак
 
Финансовый сектор. Аспекты информационной безопасности 2016
Финансовый сектор. Аспекты информационной безопасности 2016Финансовый сектор. Аспекты информационной безопасности 2016
Финансовый сектор. Аспекты информационной безопасности 2016
 
White Paper. Эволюция DDoS-атак и средств противодействия данной угрозе
White Paper. Эволюция DDoS-атак и средств противодействия данной угрозеWhite Paper. Эволюция DDoS-атак и средств противодействия данной угрозе
White Paper. Эволюция DDoS-атак и средств противодействия данной угрозе
 
Тренды 2015 года в области интернет-безопасности в россии и в мире
Тренды 2015 года в области интернет-безопасности в россии и в миреТренды 2015 года в области интернет-безопасности в россии и в мире
Тренды 2015 года в области интернет-безопасности в россии и в мире
 

Анализ количества посетителей на сайте [Считаем уникальные элементы]

  • 2. ∙ Имеем поток элементов ∙ Хотим знать, сколько их было, без повторов ∙ Не хотим хранить поток целиком Что ищем 2
  • 3. SELECT COUNT DISTINCT . . . ∙ при оптимизации и планировании запросов к БД ∙ при оценке количества уникальных пар SRC-DST в роутере ∙ при поиске паттернов в больших графах или массивах данных ∙ при web-аналитике Где нужно 3
  • 4. U множество всех возможных элементов, n = |U| S ⊂ U множество уникальных элементов в потоке F0 = |S| количество элементов в этом множестве ut ∈ S элемент на позиции t в потоке Ut ⊂ S множество уникальных элементов, которые мы видели к моменту t Считаем точно 4
  • 5. ∙ Сколько стоит добавить один элемент в множество? ∙ сортированный список ∙ битовая маска из n = |U| бит ∙ Сколько стоит посчитать количество элементов? ∙ А если элементов много? Очень? Считаем точно 4
  • 6. ∙ ˜F0 = (1 ± 𝜀) F0, 𝜀 > 0, 𝜀 ≪ 1 ∙ Как гарантировать, что ошибка будет меньше 𝜀? ∙ Насколько меньше памяти можно использовать? ∙ Как быть? Считаем приблизительно 5
  • 7. ∙ ˜F0 = (1 ± 𝜀) F0, 𝜀 > 0, 𝜀 ≪ 1 ∙ Как гарантировать, что ошибка будет меньше 𝜀? ∙ Насколько меньше памяти можно использовать? ∙ Можно добиться линейного уменьшения ∙ Ценой экспоненциального увеличения ошибки ∙ Как быть? Считаем приблизительно 5
  • 8. 1983 Flajolet, Martin Probabilistic Counting Algorithms for Data Base Applications 1996 Alon, Matias, Szegedy The Space Complexity of Approximating the Frequency Moments 2002 Bar-Yossef, Jayram, Kumar, Sivakumar, Trevisan Counting Distinct Elements in a Data Stream 2003 Durand, Flajolet LogLog Counting of Large Cardinalities 2003 Indyk, Woodruff Tight Lower Bounds for the Distinct Elements Problem State of art 6
  • 9. 2007 Flajolet, Fusy, Gandouet, Meunier HyperLogLog: the analysis of a near-optimal cardinality estimation algorithm 2010 Kane, Nelson, Woodruff Optimal Algorithm for the Distinct Elements Problem 2012 Helmi, Lumbroso, Martinez, Viola Data Streams as Random Permutations: the Distinct Element Problem State of art 6
  • 10. ∙ Кратко об этапах работы алгоритма ∙ Подробно об элементах алгоритмов ∙ Хэш-функции ∙ Разделение потока ∙ Статистики ∙ Подробно о том, почему всё это работает План 7
  • 11. bloom filter: встречался ли этот элемент в потоке? heavy hiters: какие элементы встречались чаще всего? F∞moment: как часто встречался самый распространённый элемент online pattern discovery: какие элементы чаще всего встречались вместе? Связанные задачи 8
  • 19. Идея: храним не всю информацию, а только то, что необходимо для ответа ∙ В случае вероятностного алгоритма (вариант): ∙ Храним и обновляем несколько значений x, вычисленных из увиденного потока ∙ E [f (x)] асимптотически равно оцениваемой величине ∙ Var [f (x)] должно быть мало Sketch 10
  • 21. Инициализация (для 𝜀 = 0.32) Выбрать большое простое число p, например 5247972723348490517 Выбрать три функции, например: h(x) = (3813295331020233847x + 2061310418014472126) mod p g1(x) = (4905134244493838961x + 339751972700966608) mod p mod 1000 g2(x) = (3462845419123084402x3+2920301559511116865x2+4398447080453503003x+ 1489413524815015911) mod p mod 10 Создать сжатый массив C из m = 10 элементов, равных 0. Вариант алгоритма 11
  • 22. Для каждого объекта x 1 r = lsb (h(x)) — количество нулей справа в бинарном представлении хеша + 1 2 i = g(x) 3 C[i] = max (C[i], r) Вариант алгоритма 11
  • 23. Получение результата 1 r = min(C) 2 T — количество элементов в C, которые больше r 3 Ответ: 2r+1log(1−T m ) log(1− 1 m ) Вариант алгоритма 11
  • 24. ∙ Будем рассматривать алгоритм, который: ∙ Отвечает с некоторой точностью 𝜀 F0,𝜀 = F0 · (1 ± 𝜀) ∙ Может ответить с большей ошибкой с вероятностью (1 − 𝛿) < 1 2 (𝜀, 𝛿)-аппроксимация Вероятностные алгоритмы 12
  • 25. ∙ Вероятность ошибки: 𝛿 < 1 2 ∙ Вероятность не допустить ошибку: 1 − 𝛿 > 1 2 ∙ При R повторах: ∙ Биноминальное распределение ∙ Нужно R 2 + 1 или больше верных ответов ∙ R∑︀ i=R 2 +1 (︀R i )︀ (1 − 𝛿)i 𝛿R−i Уменьшение вероятности ошибки 13
  • 26. h : U → {0, 1, 2, 3, . . . , m − 1} или h : U → {︂ 0, 1 m , 2 m , 3 m , . . . , 1 }︂ как правило, m |U| ∙ В современных реализациях потоковых алгоритмов, как правило: ∙ log m = 64 (64-битные хэш-функции). Хэш-функции 14
  • 27. ∙ Теоретически нам нужно, чтобы вероятность увидеть любой элемент была одинаковой ∙ На практике так не бывает ∙ Используем хэш-функции (теория): ∙ вероятность встретить определённый хэш 1 m ∙ даже если исходные объекты «скучкованны» Хэш-функции и случайные величины 15
  • 28. ∙ Абсолютно случайная хэш-функция: ∙ Для каждого элемента в U генерируем случайное число от 0 до m ∙ Храним n = |U| хэшей в массиве (векторе) ∙ O (n log m) места в памяти ∙ Часто нам нужно несколько хэш-функций... Память для хэш-функций 16
  • 29. ∙ На практике: ∙ используется быстрая детерминистическая функция от нескольких переменных ∙ фиксируются все переменные кроме одной ∙ нужно хранить только параметры функции ∙ как правило,O (log m) Память для хэш-функций 16
  • 36. 435839x + 117959 mod 567857 Хэш-функции 17
  • 43. ∙ При абсолютно случайной хэш-функции все значения не зависят друг от друга: Pr (h (x1) = c1, h (x2) = c2, . . . , h (xm) = cm) = 1 mm ∀ {︀ ci ∈ 0, m − 1 }︀ Семейства хэш-функций 18
  • 44. ∙ На практике нам достаточно независимости только для небольшого числа хэшей k ∙ Выбираем хэш-функцию случайно из некоторого семейства H ∙ например, для k = 2,(ax + b) mod p mod m, 0 < a < p, 0 b < p: Pr h∈H (h (x1) = c1 ∧ h (x2) = c2) = 1 m2 ∀x1, x2 ∈ U, ∀c1, c2 ∈ 0, m − 1 Семейства хэш-функций 18
  • 45. ∙ Для произвольного k h (x) = [︂(︂k−1∑︀ i=0 aixi )︂ mod p ]︂ mod m Pr (h (x1) = c1 ∧ h (x2) = c2 ∧ . . . ∧ h (xk) = ck) = 1 mk ∀x1 . . . xk ∈ U, ∀c1, . . . ck ∈ 0, m − 1 Семейства хэш-функций 18
  • 46. ∙ Вероятность верного ответа (1 − 𝛿) и память ∙ Вероятность и сложность (время выполнения) ∙ Точность 𝜀 и память: ∙ теоретически 𝜀 = 1√ M ∙ M — количество используемых хэш-функций Компромиссы 19
  • 47. ∙ В некоторый момент переключаем выполнение алгоритма с одного исполнителя (Алиса) к другому (Боб) ∙ Алиса при этом должна отправить Бобу сообщение. Дальше поток видит только Боб ∙ В конце Боб должен сказать, сколько было элементов в потоке с (𝜀, 𝛿) аппроксимацией ∙ Размер сообщения и есть потребление памяти Теоретическое потребление памяти 20
  • 48. ∙ Теоретический предел: O (︀ 1 𝜀2 + log n )︀ ∙ Наиболее распространённый на практике алгоритм: O (︀ 1 𝜀2 log log n )︀ n = |U| — количество возможных объектов (e.g. 264) log n — количество бит в бинарном представлении n (e.g. 64) log log n — количество бит, нужных для записи количества бит в n (e.g. 6) Теоретическое потребление памяти 20
  • 49. Сколько элементов в bloom-фильтре? 21
  • 50. Сколько элементов в bloom-фильтре? 21
  • 51. Сколько элементов в bloom-фильтре? 21
  • 52. Сколько элементов в bloom-фильтре? 21
  • 56. ∙ Сколько чисел из 0, m имеют ∙ k нулей в конце бинарного представления? ∙ k нулей в начале? ∙ k нулей или единиц подряд? Вероятность «редкой птицы» 23
  • 57. Pr (0 zeros) = 1 2 Pr (1 zero) = 1 2 Pr(2 zeros) = 1 4 Pr(k zeros) = 1 2k Вероятность «редкой птицы» 23
  • 58. Pr (0 zeros) = 1 2 Pr (1 zero) = 1 2 Pr(2 zeros) = 1 4 Pr(k zeros) = 1 2k ∙ А после N увиденных элементов? Вероятность «редкой птицы» 23
  • 59. Pr (0 zeros) = 1 2 Pr (1 zero) = 1 2 Pr(2 zeros) = 1 4 Pr(k zeros) = 1 2k ∙ А после N увиденных элементов? ∙ 1 − (︀ 1 − 1 2k )︀N Вероятность «редкой птицы» 23
  • 60. ∙ Итого: в «сломанном» bloom-фильтре примерно 2r 𝜑 элементов ∙ r — номер первого бита 1 справа ∙ 𝜑 — константа ∙ Нужно объединить результаты нескольких экспериментов (иначе будут ответы, кратные степеням 2) Вероятность «редкой птицы» 23
  • 61. 𝜑 = 2−1 2 e 𝛾 2 3 ∞∏︁ 𝜌=1 [︂ (4𝜌 + 1)(4𝜌 + 2) (4𝜌)(4𝜌 + 3) ]︂(−1) 𝜈(𝜌) ≈ 0.77351 𝜈(𝜌) — количество 1-бит в бинарном представлении 𝜌 𝛾 = − ∞´ 0 ln x ex dx — постоянная Эйлера Интересная константа 24
  • 62. ∙ Плохо: ответы, кратные степеням 2 ∙ Плохо: высокий разброс ошибки ∙ Хотим провести M независимых экспериментов, не дублируя поток ∙ Заводим M корзинок и раскладываем элементы в них при помощи ещё одной хэш-функции ∙ как при балансировке нагрузки ∙ одинаковые элементы всегда попадают в один «подпоток» Разделение потока 25
  • 63. ∙ NB: Первые элементы (K ∼ m) потока: ∙ NB: Сколько останется пустых корзинок? ∙ Pr (bi) = 1 m Pr (∼ bi) = (︀ 1 − 1 m )︀ ∙ Pr (∼ bi after K) = (︀ 1 − 1 m )︀K ∙ Pr (bi after K) = 1 − (︀ 1 − 1 m )︀K ∙ Все корзинки одинаковые: E (emty) = m (︁ 1 − (︀ 1 − 1 m )︀K )︁ Разделение потока 25
  • 64. ∙ применяем «сломанный bloom-фильтр» для каждой корзинки, считаем среднее ∙ Точность: 𝜀 = 0.78√ M ∙ Память: O (︀ 1 𝜀2 log n )︀ ∙ Заменив арифметическое среднее на гармоническое, получим 𝜀 = 1.02√ M Разделение потока 25
  • 65. ∙ Нам не нужно хранить сами значения в «регистрах» ∙ Достаточно индекса нужного бита ∙ вот тут и получается O (︀ 1 𝜀2 log log n )︀ Наблюдение 1 26
  • 66. ∙ В получившемся массиве почти все числа будут одинаковыми ∙ Можно хранить минимальное значение отдельно, а остальное — сжать ∙ Существуют компактные структуры данных с быстрым обновлением и запросами ∙ Память: O (sum (C)) (на практике: 3–4 1 𝜀2 ) ∙ E (#bucket ≈ log F0) = m (︁ 1 − (︀ 1 − 1 m )︀F0 )︁ ∙ остаётся выразить F0 Наблюдение 2 27
  • 67. ∙ Храним sketch за каждые несколько секунд ∙ При запросе объединяем все затронутые интервалы ∙ учитываем, что min хранится отдельно ∙ Запускаем последний шаг алгоритма ∙ Можем получить оценку не только за произвольный интервал времени, ∙ но и за объединение любых произвольных интервалов Я всё-таки хочу знать... 28
  • 68. Redis ∙ Специальная структура данных ∙ Специальные команды для этой структуры ∙ Удобно для работы с небольшим количеством множеств Реализации 29
  • 69. Clickhouse ∙ Умеет делать запросы с использованием вероятностных алгоритмов ∙ По-умолчанию uniq() использует вероятностный алгоритм ∙ Понятие состояния алгоритма и специальный тип данных Реализации 29
  • 71. 2r (r — количество 1 в конце слова x): 0 1 0 1 0 1 1 1 x 1 0 1 0 1 0 0 0 ∼ x 0 1 0 1 1 0 0 0 x + 1 0 0 0 0 1 0 0 0 ∼ x& (x + 1) = 2r Bit tricks 31
  • 72. x mod y (нам не нужен результат деления) ∙ x % p = ( x >> 61) + ( x & p) (если p = 261 − 1) ∙ ( ( uint128 ) x * ( uint128 )p ) >> 64 Bit tricks 31