Ответ 1
Разделение функции хэш-функции: наша цель состоит в том, чтобы использовать многие структуры гиперлоголога (например, предположим, что 16 структур гиперлога, каждый из которых использует 64-битную хеш-функцию) вместо одного, чтобы уменьшить ошибку оценки. Интуитивным подходом может быть обработка каждого из входных данных в каждой из этих структур гиперлога. Однако в этом случае нам нужно было бы убедиться, что гиперлоги являются независимыми друг от друга, то есть нам понадобится набор из 16 хэш-функций, которые независимы друг от друга - это трудно найти!
Таким образом, мы используем альтернативный подход. Вместо использования семейства 64-битных хеш-функций мы будем использовать 16 отдельных структур гиперлога, каждый из которых использует только 60-битную хеш-функцию. Как мы это делаем? Легко, мы берем нашу 64-битную хэш-функцию и просто игнорируем первые 4 бита, создавая 60-битную хеш-функцию. Что мы делаем с первыми 4 битами? Мы используем их для выбора одного из 16 "ведер" (каждое "ведро" - это просто структура гиперлога. Обратите внимание, что 2 ^ 4 бита = 16 ведер). Теперь каждый из входов назначается точно одному из 16 ведер, где 60-битовая хеш-функция используется для вычисления значения гиперлога. Таким образом, у нас есть 16 структур hyperloglog, каждый из которых использует 60-битную хеш-функцию. Предполагая, что мы выбрали достойную хеш-функцию (это означает, что первые 4 бита распределены равномерно и что они не коррелируют с остальными 60 битами), теперь у нас есть 16 независимых структур гиперлога. Мы принимаем гармоническое среднее из их 16 оценок, чтобы получить гораздо меньшую погрешность оценки мощности.
Надеюсь, что это очистит!