Карта → событие

Мюррей-Хилл (Bell Labs) 1996

Скетчи: сосчитать, не запоминая

Искусство счёта

Данные, которые не помещаются

К середине 1990-х возникает положение, невозможное в прежней вычислительной математике: данных больше, чем места, куда их можно положить.

Записи о звонках телефонной сети, пакеты на магистральном маршрутизаторе, обращения к большому сайту — они идут потоком, поток бесконечен, и сохранить его целиком нельзя. Между тем вопросы к нему самые обыкновенные: сколько было различных абонентов? какие адреса встречались чаще всего? насколько сегодняшнее распределение похоже на вчерашнее?

Прежние методы предполагают, что данные лежат и к ним можно обратиться. Здесь их нет — есть только проходящая мимо струя.

Модель потока

Формально задача ставится так: элементы приходят по одному, память ограничена величиной, много меньшей длины потока, второй раз посмотреть нельзя.

В 1996 году Нога Алон, Йосси Матиас и Марио Сегеди публикуют работу, за которую получат премию ГёделяКурт Гёдельавстрийский и американский логик · 1906–1978Доказал, что в любой достаточно богатой формальной системе есть истинные утверждения, которые она не может доказать, — и тем закрыл программу Гильберта в двадцать пять лет.: они показывают, что в этой модели можно и чего нельзя.

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

Можно — вычислить их приближённо, с любой заданной точностью, храня величину порядка логарифма от длины потока. Причём метод не эвристика: даны оценки ошибки и доказательства.

Как считают, не запоминая

Идея настолько наглядна, что её стоит рассказать на пальцах — на примере подсчёта числа различных элементов (Флажоле и Мартен, 1985; в нынешнем виде — HyperLogLog, 2007).

Поток проходит насквозь, память остаётся крошечнойэлементы идут мимо по одному разуих слишком много, чтобы хранитьскетчнесколько сотенчисел, и всёоценка ответас гарантией точностихеш переводит элемент в случайное число; в памяти держат не сами элементы,а несколько статистик — например, сколько нулей подряд встретилось в начале хешаточный ответ невозможен, приблизительный — почти бесплатен
Данные проходят мимо один раз, в памяти остаётся несколько сотен чисел — и этого хватает на оценкуMathLocus · построено для этого сайта

Каждый пришедший элемент пропускаем через хеш-функцию, дающую случайную на вид двоичную строку. Смотрим только на одно: сколько нулей подряд стоит в её начале, и храним лишь рекорд.

Строка начинается с одного нуля примерно у половины элементов, с двух нулей — у четверти, с $k$ нулей — у одного из $2^{k}$. Значит, если за всё время мы видели строку с десятью ведущими нулями, различных элементов, скорее всего, было около тысячи. Рекорд — одно маленькое число, и в нём содержится оценка количества.

Усреднив несколько таких счётчиков, получают устойчивую оценку: миллиард различных элементов подсчитывается с ошибкой около двух процентов в полутора килобайтах памяти. Не приблизительно — доказуемо.

Так устроены и прочие скетчи: небольшая случайная сводка потока, из которой восстанавливается ответ с гарантированной точностью. Всё то, что называют аналитикой больших данных, стоит на этом слое; выше него лежит инженерия распределённых хранилищ, к математике отношения не имеющая, а ниже — эти теоремы.

Замыкание

Здесь линию уместно остановить — не потому, что история кончилась, а потому, что видна её форма.

Двенадцать веков подряд менялся один и тот же ответ на один и тот же вопрос: что в вычислении дорого?

Каждый раз происходит одно и то же движение. Обнаруживается, что в вычислении дорого не то, что казалось, — и обнаруживший переносит трудность в другое место: в нотацию, в таблицу, в дерево, в металл, в организацию труда, в теорию ошибок, в рекурсию, в случайность.

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

А следующий дефицит уже виден. Когда счёт стал стоить электричества и воды для охлаждения, вопрос «сколько стоит вычисление» снова сделался буквальным — впервые со времён парижской мастерской, где его задавали в жалованье восьмидесяти счётчикам.

Открыть на карте