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

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

БПФ: алгоритм, опередивший потребность

Искусство счёта Нить рядов Фурье

Что было дорого

Ряд Фурье к 1960-м стал главным инструментом обработки любых сигналов: звук, сейсмограмма, радиоизлучение, дифракционная картина — всё раскладывается на частоты. Машина работает с конечным набором отсчётов, и вместо интеграла считает дискретное преобразование Фурье: по $N$ отсчётам получить $N$ амплитуд.

Прямой счёт по определению требует $N^{2}$ операций — каждая из $N$ амплитуд есть сумма $N$ слагаемых. Пока $N$ порядка сотни, это пустяк. При $N=10^{6}$ получается $10^{12}$ операций — недели работы машины 1960-х.

Именно это и упиралось: записи сейсмических станций и радиотелескопов длинные, а спектр по ним нужен весь.

Заседание

Весной 1963 года Джон Тьюки — статистик, работавший разом в Принстоне и в Bell Labs, — сидит на заседании научного консультативного комитета при президенте Кеннеди. Обсуждают, как отличить подземный ядерный взрыв от землетрясения по сейсмическим записям: от этого зависит, можно ли подписывать договор о запрете испытаний, не имея инспекций на месте. Нужен спектральный анализ длинных сейсмограмм, и он слишком дорог.

Bell Labs в Мюррей-Хилле
Bell Labs в Мюррей-ХиллеUnited States Geological Survey (USGS) · Public domain

Тьюки набрасывает на заседании идею. Присутствующий Ричард Гарвин из IBM видит набросок и передаёт его программисту Джеймсу Кули в исследовательский центр Уотсона — назвав, для секретности, совсем другую задачу, кристаллографическую. Кули пишет программу. В 1965 году выходит их совместная статья на четыре страницы.

Разделяй

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

$$T(N)=2\,T(N/2)+N \quad\Longrightarrow\quad T(N)=N\log_{2}N.$$

2565127681024n log nоперацийдлина ряда nТот же ответ, но во сколько раз дешевлепри n = 1024:напрямую — 1 048 576операцийчерез БПФ — 10 240быстрее в 102 разапри n = 10⁶ — ужев пятьдесят тысяч раз
$O(n^2)\ \longrightarrow\ O(n\log n)$
выигрыш растёт вместе с задачей — потому алгоритм и оказался важнее, чем казалось авторам
При тысяче точек выигрыш стократный, при миллионе — в пятьдесят тысяч разMathLocus · построено для этого сайта

Для $N=10^{6}$ это примерно $2\cdot10^{7}$ операций вместо $10^{12}$ — ускорение в пятьдесят тысяч раз. Не «на порядок быстрее», а «стало возможным».

БПФ — это компрессия звука и изображения, цифровое радио, томография, радиоастрономия, распознавание речи, всякая обработка сигнала вообще. В списках важнейших алгоритмов XX века он стоит первым или вторым, смотря кто составлял список.

Он уже был

В 1984 году Хайдеман, Джонсон и Беррус разбирали историю вопроса и обнаружили полный алгоритм — рекурсивное разбиение, всё как у Кули и Тьюки, — в работе ГауссаКарл Фридрих Гаусснемецкий математик и астроном · 1777–1855«Король математиков», у которого напечатанное было заметно меньше сделанного: половина результатов пролежала в дневнике до самой смерти — включая неевклидову геометрию. «Theoria interpolationis methodo nova tractata».

Работа написана осенью 1805 года. Гаусс интерполировал наблюдения астероидов Паллады и Юноны, ему требовалось разложить их по тригонометрическим суммам, и он придумал, как сделать это быстро.

Вдумаемся в дату. Мемуар ФурьеЖозеф Фурьефранцузский математик, физик и префект Изера · 1768–1830Утверждал, что любую функцию можно сложить из синусов, — и был не прав ровно настолько, чтобы математике понадобилось сто лет и три новые теории, чтобы разобраться. прочитан в Институте в 1807 году. То есть быстрый алгоритм для анализа Фурье был придуман раньше, чем сам анализ Фурье.

Гаусс это не опубликовал. Работа вышла посмертно, в третьем томе собрания сочинений 1866 года, на новолатинском языке и в устаревшей уже тогда нотации, — и сто восемнадцать лет пролежала непрочитанной.

Почему её не прочли

Причина не только в латыни, и она составляет главную мысль этой точки.

Алгоритм опередил не публикацию, а потребность. Выигрыш $N/\log N$ ничтожен при малых $N$: при шестнадцати точках, которые Гаусс считал руками, разница между $256$ и $64$ действиями не стоит усложнения. Быстрое преобразование Фурье имеет смысл только тогда, когда $N$ измеряется миллионами, — то есть только при машине.

Читатели 1866 года не могли оценить эту работу не потому, что были невнимательны, а потому, что у них не было задачи, на которой видна разница.

Мы уже видели в этой линии человека, который сделал открытие и не сумел его рассказать. Здесь случай тоньше и печальнее: рассказ был написан и напечатан, но мир ещё сто лет не имел органа, которым это можно услышать.

Следующая точка: Цюрих — где оказалось, что и умножение матриц мы делали неоптимально.

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