В информатике проблема подсчета различных элементов [1]
(также известная в прикладной математике как проблема оценки мощности ) — это проблема нахождения количества различных элементов в потоке данных с повторяющимися элементами. Это известная проблема с многочисленными приложениями. Элементы могут представлять IP-адреса пакетов, проходящих через маршрутизатор , уникальных посетителей веб-сайта, элементы в большой базе данных, мотивы в последовательности ДНК или элементы сетей RFID / сенсоров .
Формальное определение
Пример : Рассмотрим поток элементов с повторениями. Пусть обозначает количество отдельных элементов в потоке, а множество отдельных элементов представлено как .
Цель : Найти оценку использования только единиц хранения, где .
Примером экземпляра для задачи оценки мощности является поток: . Для этого экземпляра .
Наивное решение
Наивное решение проблемы следующее:
Инициализируйте счетчик c нулевым значением . Инициализируйте эффективную структуру данных словаря D , например, хэш-таблицу или дерево поиска, в котором вставка и членство могут быть выполнены быстро. Для каждого элемента выдается запрос на членство. Если не является членом D ( ) Добавить к D Увеличить c на единицу, в противном случае ( ) ничего не делать. Вывод .
Пока число отдельных элементов не слишком велико, D помещается в основную память, и точный ответ может быть получен. Однако этот подход не масштабируется для ограниченного хранилища или если вычисления, выполняемые для каждого элемента, должны быть минимизированы. В таком случае было предложено несколько потоковых алгоритмов , которые используют фиксированное число единиц хранения.
Алгоритм HyperLogLog
Алгоритмы потоковой передачи
Для обработки ограниченного ограничения хранилища потоковые алгоритмы используют рандомизацию для получения неточной оценки определенного числа элементов, . Современные оценщики хэшируют каждый элемент в эскиз данных низкой размерности с помощью хэш-функции, . Различные методы можно классифицировать в соответствии с эскизами данных, которые они хранят.
Эскизы мин/макс
Минимальные/максимальные эскизы [2] [3] хранят только минимальные/максимальные хэшированные значения. Примеры известных оценок минимальных/максимальных эскизов: Chassaing et al. [4] представляет максимальный эскиз, который является минимально-дисперсионной несмещенной оценкой для проблемы. Непрерывная оценка максимальных эскизов [5] является оценкой максимального правдоподобия . Оценкой выбора на практике является алгоритм HyperLogLog . [6]
Интуиция, лежащая в основе таких оценщиков, заключается в том, что каждый эскиз несет информацию о желаемой величине. Например, когда каждый элемент связан с однородным RV , , ожидаемое минимальное значение равно . Хэш-функция гарантирует, что оно идентично для всех появлений . Таким образом, существование дубликатов не влияет на значение статистики экстремального порядка.
Существуют и другие методы оценки, отличные от min/max эскизов. Первая статья по оценке по количеству различий [7] описывает алгоритм Flajolet–Martin , эскиз битового шаблона. В этом случае элементы хэшируются в битовый вектор, а эскиз содержит логическое ИЛИ всех хэшированных значений. Первый асимптотически оптимальный по пространству и времени алгоритм для этой задачи был предложен Daniel M. Kane , Jelani Nelson и David P. Woodruff. [8]
Нижний-мэскизы
Эскизы Bottom -m [9]
являются обобщением эскизов min, которые поддерживают минимальные значения, где . Теоретический обзор алгоритмов оценки с учетом различий см. в работе Cosma et al. [2] , а практический обзор со сравнительными результатами моделирования — в работе Metwally [10]
.
Реализация алгоритма CVM Кнута на языке Python
определение алгоритма_d ( поток , с ):m = len ( stream ) # Мы предполагаем, что это дано нам заранее.t = - 1 # Обратите внимание, что Кнут индексирует поток с 1.р = 1а = 0буфер = []пока t < ( m - 1 ):т += 1а = поток [ т ]u = равномерный ( 0 , 1 )буфер = список ( фильтр ( лямбда x : x [ 1 ] != a , буфер ))если и < р :если ( len ( буфер ) < s ):буфер . добавить ([ u , a ])еще :буфер = сортированный ( буфер )p = макс ( буфер [ - 1 ][ 0 ], u )буфер . поп ()буфер . добавить ([ u , a ])вернуть len ( буфер ) / p
Алгоритм CVM
По сравнению с другими алгоритмами приближения для проблемы подсчета различных элементов алгоритм CVM [11] (названный Дональдом Кнутом в честь инициалов Соурава Чакраборти, Н. В. Винодчандрана и Кулдипа С. Мила) использует выборку вместо хеширования. Алгоритм CVM обеспечивает несмещенную оценку количества различных элементов в потоке [12] в дополнение к стандартным гарантиям (ε-δ). Ниже представлен алгоритм CVM, включая небольшую модификацию Дональда Кнута. [12]
Инициализация Инициализация максимального размера буфера , где Инициализация пустого буфера, B Для каждого элемента в потоке данных размером выполните: Если есть в B , то Удалить из B случайное число в Если , то Если , то вставить в B еще такой, что /* чье максимально в B */ Если тогда еще Заменить на End для возврата .
Предыдущая версия алгоритма CVM улучшена с помощью следующей модификации Дональда Кнута, которая добавляет цикл while для обеспечения сокращения B. [12]
Инициализация Инициализация максимального размера буфера , где Инициализация пустого буфера, B Для каждого элемента в потоке данных размером выполните: Если есть в B, то Удалить из B случайное число в If , то Вставить в B, пока затем Удалить каждый элемент из B с помощью End While If, то Вставьте в конец B для возврата .
Проблема взвешенного количества-различения
В его взвешенной версии каждый элемент связан с весом, и цель состоит в том, чтобы оценить общую сумму весов. Формально,
Экземпляр : Поток взвешенных элементов с повторениями и целое число . Пусть будет числом различных элементов, а именно , и пусть эти элементы будут . Наконец, пусть будет весом .
Цель : Найти оценку использования только единиц хранения, где .
Примером экземпляра для задачи с весом является: . Для этого экземпляра , веса равны и .
В качестве примера приложения могут быть IP- пакеты, полученные сервером. Каждый пакет принадлежит одному из IP-потоков . Вес может быть нагрузкой, налагаемой потоком на сервер. Таким образом, представляет собой общую нагрузку, налагаемую на сервер всеми потоками, к которым принадлежат пакеты.
Решение проблемы взвешенного количества-различения
Любая оценка экстремальной статистики порядка (минимум/максимум эскизов) для невзвешенной задачи может быть обобщена до оценки для взвешенной задачи. [13]
Например, взвешенная оценка, предложенная Коэном и др. [5], может быть получена при расширении непрерывной оценки максимальных эскизов для решения взвешенной задачи. В частности, алгоритм HyperLogLog [6] может быть расширен для решения взвешенной задачи. Расширенный алгоритм HyperLogLog обеспечивает наилучшую производительность с точки зрения статистической точности и использования памяти среди всех других известных алгоритмов для взвешенной задачи.
^ ab Cosma, Ioana A.; Clifford, Peter (2011). "Статистический анализ вероятностных алгоритмов подсчета". Scandinavian Journal of Statistics . arXiv : 0801.3552 .
^ Жируар, Фредерик; Фьюзи, Эрик (2007). Труды Четвертого семинара по аналитической алгоритмике и комбинаторике (ANALCO) 2007 г. С. 223–231 . CiteSeerX 10.1.1.214.270 . doi :10.1137/1.9781611972979.9. ISBN978-1-61197-297-9.
^ Chassaing, Philippe; Gerin, Lucas (2006). "Эффективная оценка мощности больших наборов данных". Труды 4-го коллоквиума по математике и информатике . arXiv : math/0701347 . Bibcode :2007math......1347C.
^ ab Cohen, Edith (1997). «Структура оценки размера с приложениями к транзитивному замыканию и достижимости». J. Comput. Syst. Sci . 55 (3): 441– 453. doi : 10.1006/jcss.1997.1534 .
^ ab Flajolet, Philippe ; Fusy, Eric; Gandouet, Olivier; Meunier, Frederic (2007). "HyperLoglog: анализ алгоритма оценки мощности, близкого к оптимальному" (PDF) . Анализ алгоритмов .
^ Флажоле, Филипп ; Мартин, Г. Найджел (1985). «Вероятностные алгоритмы подсчета для приложений баз данных» (PDF) . J. Comput. Syst. Sci . 31 (2): 182– 209. doi :10.1016/0022-0000(85)90041-8.
^ Кейн, Дэниел М .; Нельсон, Джелани ; Вудрафф, Дэвид П. (2010). «Оптимальный алгоритм для проблемы отдельных элементов». Труды 29-го ежегодного симпозиума ACM по принципам систем баз данных (PODS) .
^ Коэн, Эдит ; Каплан, Хаим (2008). «Более точная оценка с использованием нижних k-скетчей» (PDF) . PVLDB .
^ Метвалли, Ахмед; Агравал, Дивьякант; Аббади, Амр Эль (2008), Зачем использовать логарифмическую систему, если можно использовать линейную?: На пути к эффективному отчетливому подсчету поискового трафика , Труды 11-й международной конференции по расширению технологий баз данных: достижения в технологии баз данных, стр. 618–629 , CiteSeerX 10.1.1.377.4771
^ Чакраборти, Сурав; Винодчандран, Невада; Мил, Калдип С. (2022). «Отдельные элементы в потоках: алгоритм для (текстовой) книги». Schloss Dagstuhl – Leibniz-Zentrum für Informatik: 6 страниц, 727571 байт. arXiv : 2301.10191 . doi : 10.4230/LIPIcs.ESA.2022.34 . ISSN 1868-8969.{{cite journal}}: Цитировать журнал требует |journal=( помощь )
^ abc Кнут, Дональд (май 2023 г.). «Алгоритм CVM для оценки отдельных элементов в потоках» (PDF) .{{cite journal}}: Цитировать журнал требует |journal=( помощь )
^ Коэн, Реувен ; Кацир, Лиран; Йехезкель, Авив (2014). «Унифицированная схема обобщения оценок мощности для суммирования». Information Processing Letters . 115 (2): 336– 342. doi :10.1016/j.ipl.2014.10.009.