Поточный алгоритмПоточный алгоритм (англ. streaming algorithm) — алгоритм для обработки последовательности данных в один или малое число проходов. Поточные алгоритмы решают задачи, в которых данные приходят последовательно и в большом объёме. Примером может служить анализ сетевого трафика на стороне маршрутизатора. Подобные задачи накладывают на поточные алгоритмы естественные ограничения по доступной памяти (намного меньше, чем размер входных данных) и времени обработки каждого элемента последовательности. Зачастую, обработка данных возможна только в один проход. Строгие ограничения на время и память часто делают невозможным точное решение исследуемой задачи. Обычно поточные алгоритмы являются вероятностными и дают приближение на точный ответ. ИсторияХотя подобные алгоритмы рассматривались в работах первой половины 1980-х годов[1][2], понятие поточного алгоритма было впервые формализовано в работе Алона, Матиаса (англ. Yossi Matias) и Сегеди (англ. Mario Szegedy) в 1996 году[3]. В 2005 году авторы были удостоены премии Гёделя за вклад в теорию алгоритмов (англ. for their foundational contribution to streaming algorithms). В 2005 году было введено понятие полупоточных алгоритмов (англ. semi-streaming algorithm)[4] как алгоритмов обрабатывающих входящий поток за постоянное или логарифмическое от размера объема данных число проходов. МодельВ модели потоковых данных считается, что часть или весь набор входных данных, над которыми необходимо осуществлять обработку, недоступен для произвольного доступа: входные данные поступают последовательно и непрерывно в одном или нескольких потоках. Потоки данных могут быть представлены упорядоченной последовательностью точек («обновлений»), доступ к которым может осуществляться по порядку и только один или ограниченное число раз. Во многих публикациях по поточной обработке рассматривают задачу вычисления статистик над частотным распределением данных. При этом объем самих данных слишком велик для эффективного хранения. Примерами нетривиальных задач являются вычисление медианы, произвольных персенталей или количество уникальных элементов в потоке. Формально, для данного класса задач предполагается, что вектор (инициализированный нулевой последовательностью ) имеет некоторое количество «обновлений». Каждое обновление увеличивает или уменьшает значение в отдельной ячейке вектора. Цель алгоритма — вычислить функции от , используя существенно меньше места, чем это потребовало бы полное как представление вектора , так и схоранение объема обрабатываемых данных. Существуют две общих модели обновления таких данных: «касса» (англ. cash register) и «турникет» (англ. turnstile). В «кассовой» модели каждое «обновление» представляется в форме и модифицируют вектор таким образом, что увеличивается на некоторое положительное целое число . Зачастую , что обозначает тривиальную инкрементную модель. В «турникетной» модели каждое «обновление» представляется в форме и модифицируют вектор таким образом, что увеличивается на некоторое положительное или отрицательное целое число . В строгой турникетной модели, в любой момент времени не может быть отрицательным. В ряде источников дополнительно рассматривают модель на скользящем окне. В данной модели функция вычисляется над окном фиксированной длины. По мере обработки потока, старые элементы удаляются с одного конца окна, а новые добавляются с другого. В поточных алгоритмах рассматриваются не только вопросы, связанные с частотными характеристиками данных, но и ряд других. Много задач на графах решаются в условиях того, что матрица смежности графа потоково подгружается в некотором заранее неизвестном порядке. Также существуют задачи, когда порядок имеет особое значение. Например, задачи подсчета числа инверсий или поиска наибольшей возрастающей подпоследовательности. Сравнение алгоритмовОсновные характеристики поточных алгоритмов:
Данные алгоритмы имеют много общего с онлайн-алгоритмами[англ.], так как алгоритм должен принимать решение до того, как все данные станут доступны, но есть и различия. В частности, поточные алгоритмы имеют возможность отложить принятие решение до момента прихода группы точек последовательности данных, в то время как онлайн-алгоритмы должны принимать решения по мере прихода каждой новой точки последовательности. Если алгоритм является приближённым, то точность ответа является ещё одним показателям. Точность алгоритма часто представляется как величина , означающая то, что алгоритм достигнет ошибки меньше с вероятностью . ПрименениеПоточные алгоритмы имеют большое значение в задачах мониторинга компьютерных сетей. Например, отслеживание потоков высокой интенсивности, оценка общего числа различных потоков, приблеженная оценка распределения интенсивности потоков и т.п.[5]. Также поточные алгоритмы могут применяться в базах данных, например, для оценки размера соединения таблиц. Примеры задач, решаемых поточными алгоритмамиПроблемы с частотным распределением-ый момент частоты в векторе определяется как . Первый момент — это простая сумма частот (то есть, общее число). Второй момент полезен для вычисления статистических параметров данных, например Коэффициент Джини. определяется как частота наиболее часто встречающегося элемента. Также изучены вопросы оценки моментов частот. Поиск тяжёлых элементовЗадача состоит в поиске наиболее часто встречающегося элемента в потоке данных. Здесь применяются следующие алгоритмы:
Отслеживание трендаОтслеживанием тренда в потоке данных обычно производится в следующем порядке: наиболее частые элементы и их частоты определяются на основе одного из вышеперечисленных алгоритмов[уточнить]<--алгоритмов поиска тяжёлых элементов? а если эту секцию перенсут ниже?-->, а затем наибольшее увеличение относительно предыдущего момента времени отмечается как тренд. Для этого используется экспоненциальная скользящая средняя и различная нормировка[6]. Он используется O(ε² + log d) места и O(1) для худщего случая обновления при универсальной хеш-функции из семейства r-умных независимых хеш-функций с r = Ω(log(1/ε)/ log log(1/ε))[уточнить]. ЭнтропияЭмпирическая оценка энтропии над набором частот определяется как , где [7]. Машинное обучениеОсновная задача онлайнового машинного обучения — обучить модель (например, классификатор) за один проход по обучающей выборке; для её решения обычно используются методы предсказательного хеширования[англ.]) и стохастический нисходящий градиент). Подсчёт числа уникальных элементовПодсчёт числа уникальных элементов в потоке данных (момент ) является ещё одной[уточнить] хорошо изученной проблемой. Первый алгоритм был предложен Флажоле и Мартеном[2]. В 2010 году был найден асимптотически оптимальный алгоритм[8]. Примечания
Литература
Ссылки
Учебники
Курсы
|
Portal di Ensiklopedia Dunia