Jump to content

Гиперлоглог

HyperLogLog — это алгоритм решения задачи подсчета различных элементов , аппроксимирующий количество различных элементов в мультимножестве . [1] Вычисление точной мощности отдельных элементов мультимножества требует объема памяти, пропорционального мощности, что непрактично для очень больших наборов данных. Вероятностные оценки мощности, такие как алгоритм HyperLogLog, используют значительно меньше памяти, но могут только аппроксимировать мощность. Алгоритм HyperLogLog способен оценивать мощность > 10. 9 с типичной точностью (стандартной ошибкой) 2% при использовании 1,5 КБ памяти. [1] HyperLogLog — это расширение более раннего алгоритма LogLog. [2] сам по себе является производным от алгоритма Флажоле-Мартена 1984 года . [3]

Терминология [ править ]

В оригинальной статье Flajolet et al. [1] а в соответствующей литературе по проблеме подсчета различных элементов термин «мощность» используется для обозначения количества различных элементов в потоке данных с повторяющимися элементами. Однако в теории мультимножеств этот термин относится к сумме кратностей каждого члена мультимножества. В этой статье мы решили использовать определение Флажоле для обеспечения соответствия источникам.

Алгоритм [ править ]

В основе алгоритма HyperLogLog лежит наблюдение о том, что мощность мультимножества равномерно распределенных случайных чисел можно оценить путем вычисления максимального количества ведущих нулей в двоичном представлении каждого числа в наборе. Если максимальное количество наблюдаемых ведущих нулей равно n , оценка количества различных элементов в наборе равна 2. н . [1]

В алгоритме HyperLogLog к каждому элементу исходного мультимножества применяется хэш-функция для получения мультимножества равномерно распределенных случайных чисел с той же мощностью, что и исходное мультимножество. Затем мощность этого случайно распределенного набора можно оценить с помощью приведенного выше алгоритма.

Простая оценка мощности, полученная с помощью приведенного выше алгоритма, имеет тот недостаток, что она имеет большую дисперсию . В алгоритме HyperLogLog дисперсия минимизируется путем разделения мультимножества на множество подмножеств, вычисления максимального количества ведущих нулей в числах в каждом из этих подмножеств и использования гармонического среднего для объединения этих оценок для каждого подмножества в оценку мощность всего множества. [4]

Операции [ править ]

HyperLogLog имеет три основные операции: добавление для добавления нового элемента в набор, подсчет для получения мощности набора и слияние для получения объединения двух наборов. Некоторые производные операции можно вычислить с использованием принципа включения-исключения , например мощность пересечения или мощность разницы между двумя HyperLogLog, объединяющими операции слияния и подсчета.

Данные HyperLogLog хранятся в массиве M из m счетчиков (или «регистров»), которые инициализируются значением 0. Массив M , инициализированный из мультинабора S, называется эскизом HyperLogLog S.

Добавить [ править ]

Операция сложения состоит из вычисления хеш-функции входных данных v с помощью хеш-функции h и получения первых b битов (где b ) и добавляя к ним 1, чтобы получить адрес регистра, который нужно изменить. С оставшимися битами вычислить который возвращает позицию самой левой 1, где самая левая позиция равна 1 (другими словами: количество ведущих нулей плюс 1). Новое значение регистра будет максимальным между текущим значением регистра и .

Посчитать [ править ]

Алгоритм подсчета состоит в вычислении среднего гармонического значения m регистров и использовании константы для получения оценки. из графа:

Интуиция подсказывает, что n — неизвестная мощность M , каждое подмножество будет иметь элементы. Затем должно быть близко к . Среднее гармоническое значение 2 для этих величин равно который должен быть рядом . Таким образом, должно быть приблизительно .

Наконец, константа вводится для исправления систематического мультипликативного смещения, присутствующего в из-за хеш-коллизий.

соображения Практические

Константа вычислить непросто, и его можно аппроксимировать формулой [1]

Однако метод HyperLogLog предвзято подходит для малых мощностей ниже порога . В оригинальной статье предлагается использовать другой алгоритм для малых мощностей, известный как линейный подсчет. [5] В случае, когда приведенная выше оценка меньше порога , можно использовать альтернативный расчет:

  1. Позволять быть числом регистров, равным 0.
  2. Если , используйте стандартную программу оценки HyperLogLog выше.
  3. В противном случае используйте линейный подсчет:

Кроме того, для очень больших мощностей, приближающихся к пределу размера регистров ( для 32-битных регистров) мощность можно оценить с помощью:

С учетом указанных выше поправок на нижнюю и верхнюю границы ошибку можно оценить как .

идти [ править ]

Операция слияния двух HLL ( ) заключается в получении максимума для каждой пары регистров

Сложность [ править ]

Для анализа сложности потоковая передача данных модель [6] используется, который анализирует пространство, необходимое для получения аппроксимация с фиксированной вероятностью успеха . Относительная ошибка HLL равна и это нужно пространство, где n — установленная мощность, а m — количество регистров (обычно меньше одного байта).

Операция добавления зависит от размера вывода хэш-функции. Поскольку этот размер фиксирован, мы можем считать, что время выполнения операции добавления равно .

Операции подсчета и слияния зависят от количества регистров m и имеют теоретическую стоимость . В некоторых реализациях ( Redis ) [7] количество регистров фиксировано, а стоимость считается в документации.

ХЛЛ++ [ править ]

Алгоритм HyperLogLog++ предлагает несколько улучшений алгоритма HyperLogLog для снижения требований к памяти и повышения точности в некоторых диапазонах мощностей: [6]

  • Вместо 32-битной хеш-функции, использованной в оригинальной статье, используется 64-битная хэш-функция. Это уменьшает коллизии хэшей для больших мощностей, позволяя удалить коррекцию большого диапазона.
  • Некоторая погрешность обнаруживается для малых мощностей при переходе от линейного подсчета к подсчету HLL. Для смягчения этой проблемы предлагается использовать эмпирическую коррекцию систематической ошибки.
  • Разреженное представление регистров предлагается для уменьшения требований к памяти для малых мощностей, которые позже могут быть преобразованы в плотное представление, если мощность растет.

Потоковая передача HLL [ править ]

Когда данные поступают в одном потоке, используется оценщик исторической обратной вероятности или мартингейл. [8] [9] значительно повышает точность эскиза HLL и использует на 36 % меньше памяти для достижения заданного уровня ошибок. Этот оценщик является доказуемо оптимальным для любого повторяющегося нечувствительного приблизительного эскиза индивидуального подсчета в одном потоке.

Сценарий с одним потоком также приводит к вариантам в построении эскиза HLL.HLL-TailCut+ использует на 45% меньше памяти, чем исходный эскиз HLL, но за счет зависимости от порядка вставки данных и невозможности объединить эскизы. [10]

Дальнейшее чтение [ править ]

  • «Новые алгоритмы оценки мощности для эскизов HyperLogLog» (PDF) . Проверено 29 октября 2016 г.

Ссылки [ править ]

  1. ^ Jump up to: Перейти обратно: а б с д и Флажоле, Филипп; Фьюзи, Эрик; Гандуэ, Оливье; Менье, Фредерик (2007). «Гиперлоглог: анализ почти оптимального алгоритма оценки мощности» (PDF) . Труды дискретной математики и теоретической информатики . АХ . Нанси, Франция : 137–156. CiteSeerX   10.1.1.76.4286 . Проверено 11 декабря 2016 г.
  2. ^ Дюран, М.; Флажоле, П. (2003). «LogLog подсчет больших мощностей». (PDF) . В Г. Ди Баттиста и У. Цвик (ред.). Конспекты лекций по информатике . Ежегодный европейский симпозиум по алгоритмам (ESA03). Том. 2832. Спрингер. стр. 605–617.
  3. ^ Флажоле, Филипп; Мартин, Дж. Найджел (1985). «Алгоритмы вероятностного подсчета для приложений баз данных» (PDF) . Журнал компьютерных и системных наук . 31 (2): 182–209. дои : 10.1016/0022-0000(85)90041-8 .
  4. ^ С. Хойле; М. Нункессер; Зал (2013). «HyperLogLog на практике: алгоритмическая разработка современного алгоритма оценки мощности» (PDF) . сек 4.
  5. ^ Ванг, Кю-Янг; Вандер-Занден, Брэд Т; Тейлор, Ховард М. (1990). «Алгоритм вероятностного подсчета с линейным временем для приложений баз данных» . Транзакции ACM в системах баз данных . 15 (2): 208–229. дои : 10.1145/78922.78925 . S2CID   2939101 .
  6. ^ Jump up to: Перейти обратно: а б «HyperLogLog на практике: алгоритмическая разработка современного алгоритма оценки мощности» . Проверено 19 апреля 2014 г.
  7. ^ «PFCOUNT – Redis» .
  8. ^ Коэн, Э. (март 2015 г.). «Пересмотр эскизов на всех расстояниях: оценки HIP для анализа массивных графиков». Транзакции IEEE по знаниям и инженерии данных . 27 (9): 2320–2334. arXiv : 1306.3284 . дои : 10.1109/TKDE.2015.2411606 .
  9. ^ Тинг, Д. (август 2014 г.). «Потоковый приблизительный подсчет отдельных элементов» . Материалы 20-й международной конференции ACM SIGKDD по обнаружению знаний и интеллектуальному анализу данных . стр. 442–451. дои : 10.1145/2623330.2623669 . ISBN  978-1-4503-2956-9 . S2CID   13179875 .
  10. ^ Сяо, К.; Чжоу, Ю.; Чен, С. (май 2017 г.). «Лучше с меньшим количеством битов: повышение производительности оценки мощности больших потоков данных». IEEE INFOCOM 2017 — Конференция IEEE по компьютерным коммуникациям . стр. 1–9. дои : 10.1109/INFOCOM.2017.8057088 . ISBN  978-1-5090-5336-0 . S2CID   27159273 .
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 7896abfce68ae4232ca640a24229dd8b__1710431040
URL1:https://arc.ask3.ru/arc/aa/78/8b/7896abfce68ae4232ca640a24229dd8b.html
Заголовок, (Title) документа по адресу, URL1:
HyperLogLog - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)