dump-2013 Наука и жизнь - Приближённый подсчёт количества...
TRANSCRIPT
![Page 1: DUMP-2013 Наука и жизнь - Приближённый подсчёт количества уникальных элементов - Комаров Иван](https://reader034.vdocuments.mx/reader034/viewer/2022042723/58f247951a28ab2c448b45a7/html5/thumbnails/1.jpg)
Приближённый подсчёт количества уникальных элементов
Иван Комаров
24 мая 2013 г.
![Page 2: DUMP-2013 Наука и жизнь - Приближённый подсчёт количества уникальных элементов - Комаров Иван](https://reader034.vdocuments.mx/reader034/viewer/2022042723/58f247951a28ab2c448b45a7/html5/thumbnails/2.jpg)
Дневная аудитория Твиттера
Задача
241 млн твитов (без реплаев и ретвитов) за день; файл с никами авторовзанимает 2,7 ГБ. Сколько различных авторов среди всех авторов?
Возможные подходы к решениюПамять, КБ Время, с Результат
Сортировка ≈ 6 500 000 601 32639778Хеш-таблица ≈ 1 800 000 230 32639778Приближённый алгоритм 4 43 32945522
Ошибка приближённого алгоритма
|32945522− 32639778|32639778
≈ 0.0093 < 1%
![Page 3: DUMP-2013 Наука и жизнь - Приближённый подсчёт количества уникальных элементов - Комаров Иван](https://reader034.vdocuments.mx/reader034/viewer/2022042723/58f247951a28ab2c448b45a7/html5/thumbnails/3.jpg)
Phillipe Flajolet
Probabilistic Counting Algorithms for Data Base Applications, 1985
![Page 4: DUMP-2013 Наука и жизнь - Приближённый подсчёт количества уникальных элементов - Комаров Иван](https://reader034.vdocuments.mx/reader034/viewer/2022042723/58f247951a28ab2c448b45a7/html5/thumbnails/4.jpg)
Собираем массив битов
Идея
По входным элементам Elems ⊂ 𝒰 с помощью хеш-функцииℋ : 𝒰 → {0, 1}32 вычисляем массив битов Bitmap.
Bitmapi = 1 ⇐⇒ ∃e ∈ Elems : ntz(ℋ(e)) = i
Здесь ntz(x) — позиция самой младшей единицы в x (позициинумеруются с нуля).
Примерℋ(monster_tweet) = 11011001000101110101110110101010ℋ(thebloodyhippy) = 00110100111010111111100000110101ℋ(chiomajoyce) = 11011001000101110101110110101010ℋ(pyrocrewfx) = 10110101000011010010111001010100ℋ(zackkingkhan) = 10000100011110000101100001100000Bitmap = 00000000000000000000000000100111
Наблюдение
Повторяющиеся элементы никак не меняют массив битов.
![Page 5: DUMP-2013 Наука и жизнь - Приближённый подсчёт количества уникальных элементов - Комаров Иван](https://reader034.vdocuments.mx/reader034/viewer/2022042723/58f247951a28ab2c448b45a7/html5/thumbnails/5.jpg)
И зачем мы это сделали?
Пример массива битов для 216 уникальных авторов0
00
10
20
30
40
50
60
70
80
90
100
111
120
130
141
151
161
171
181
191
201
211
221
231
241
251
261
271
281
291
301
31
R
Если среди элементов было N уникальных, то мы можем оценить log2N спомощью позиции самого младшего нуля в Bitmap (назовём её R).
P{ntz(x) = 0} = 12
P{ntz(x) = 1} = 14
P{ntz(x) = 2} = 18
· · ·P{ntz(x) = k} = 1
2k+1
![Page 6: DUMP-2013 Наука и жизнь - Приближённый подсчёт количества уникальных элементов - Комаров Иван](https://reader034.vdocuments.mx/reader034/viewer/2022042723/58f247951a28ab2c448b45a7/html5/thumbnails/6.jpg)
Первый подход
Утверждение
E(R) ≈ log2 𝜙N
Магическая константа
𝜙 =e𝛾√2
∞∏︁p=1
(︂2p + 1
2p
)︂(−1)OneCount(p)
≈ 0.77351*
Вычисляем N
N =2R
𝜙
*(см. адский матан в статье)
![Page 7: DUMP-2013 Наука и жизнь - Приближённый подсчёт количества уникальных элементов - Комаров Иван](https://reader034.vdocuments.mx/reader034/viewer/2022042723/58f247951a28ab2c448b45a7/html5/thumbnails/7.jpg)
Проблема
Среднеквадратичное отклонение слишком велико: 𝜎(R) ≈ 1, 12
![Page 8: DUMP-2013 Наука и жизнь - Приближённый подсчёт количества уникальных элементов - Комаров Иван](https://reader034.vdocuments.mx/reader034/viewer/2022042723/58f247951a28ab2c448b45a7/html5/thumbnails/8.jpg)
Стохастическое усреднение
РешениеM = 2k независимых массивов битов, k младших битов хеша определяютномер массива.
Пример для M = 8
ℋ(thebloodyhippy) = 00110100111010111111100000110101
0 . . . 0 0 . . . 0 0 . . . 0 0 . . . 0 0 . . . 0 0 . . . 0 0 . . . 0 0 . . . 0
0 1 2 3 4 5 6 7
Вычисляем N
N =M
𝜙2R1+R2+...+RM
M
Стандартная ошибка приблизительно равна 0,78√M
.
![Page 9: DUMP-2013 Наука и жизнь - Приближённый подсчёт количества уникальных элементов - Комаров Иван](https://reader034.vdocuments.mx/reader034/viewer/2022042723/58f247951a28ab2c448b45a7/html5/thumbnails/9.jpg)
Если вы ещё не заснули, поднимите руку
Для заинтересовавшихся
В твиттере @i_komarov и ЖЖ dfyz будет опубликована ссылка наподборку материалов по теме.