2.3.2. Обычный и быстрый алгоритм свертки
Рассмотрим два конечных вектора (массива). Для удобства их длина одинакова и равна n. Если же массивы имеют разное количество элементов n и m, причем n>m, то более короткий массив дополняем n-m нулями до n элементов (выравниваем массивы по более длинному).
Имеем:
a = (a0, a1, a2, …, an-1)
b = (b0, b1, b2, …, bn-1).
Оценим трудоемкость вычисление свертки по обычному алгоритму:
c0 = a0b0 - состоит из 1 слагаемого
c1 = a0b1 + a1b0 - состоит из 2 слагаемых
c2 = … - состоит из 3 слагаемых
до середины массива с количество слагаемых, из которых состоят его элементы, увеличивается до n
сn-1 = a0bn-1 + … + an-1b0,
n слагаемых
а от cn до c2n-2 уменьшается. Последний элемент массива – c2n – 2 – имеет одно слагаемое. Итого:
T(n) = 1 + 2 + 3 + … + (n-1) + n + (n-1) + … + 3 + 2 + 1 = n2.
Если реализовать вычисления по формуле (2.5а), т.е. нерационально – путем организации трех вложенных циклов (во внутреннем цикле будет проверка по условию k + l = i), то трудоемкость будет даже не n2, а n3. На самом деле, используя в формулах свертки преобразование Фурье, можно снизить трудоемкость с n2 до nlog(n). Для вывода этих формул сначала докажем теорему.
Теорема 2.1. Пусть a = (a0, a1, a2, … , an-1, 0, 0, 0 … 0)
и b = (b0, b1, b2, … , bn-1, 0, 0, 0 … 0) – массив длины 2n полученные из первоначальных массивов длины n путем дописывания n нулей. Соответственно, F(a) и F(b) – преобразования Фурье от этих массивов, т.е.
F(a) =
F(b) =( .
Тогда преобразование Фурье от их свертки:
есть ничто иное, как покоординатное произведение массивов F(a) и F(b), помноженное на 2n: .
Доказательство. Введем переменную w = exp { -2i/2n}.
Тогда, по формулам преобразования Фурье:
Аналогично,
Теперь мы можем перемножить и . Посмотрим, что получится в результате:
Ввёдем новую переменную m = l +j.
В результате получаем
Теорема доказана.
Используя Теорему 2.1, в которой фактически сказано, что преобразование Фурье от свертки есть
F(c) = F(a*b) = 2n F(a) ○ F(b)
Операция покоординатного перемножения массивов
приходим к выводу, что можно выполнять свертку с помощью преобразования Фурье по следующей формуле:
a*b = F-1(2nF(a) ○ F(b)), (2.6)
где F-1 – обратное преобразование Фурье. => Свертка массивов a и b может быть выполнена по формуле 2.6.
Трудоемкость свертки по формуле 2.6:
T(n) = 3 · 2n · log(2n) ≈ n logn << n2
т.к. в расчетах применяются 2 прямых и одно обратно преобразование Фурье с одинаковой трудоемкостью 2nlog(2n), и длина обрабатываемого массива 2n
трудоемкость покоординатного перемножения массивов
- Основные понятия. Справочный материал
- Основные понятия
- 1.2. Справочный материал. Сравнение скорости роста основных функций
- 2 Новые быстрые версии старых алгоритмов
- 2.1. Сортировки массивов
- 2.1.1 Метод прямого выбора (SelectSort)
- 2.1.2 Быстрая сортировка методом двоичных вставок (MergeSort)
- 2.2. Преобразование Фурье (бпф)
- 2.2.1. Дискретное преобразование Фурье
- 2.2.2. Полубыстрое преобразование Фурье (ппф)
- 2.2.3. Быстрое преобразование Фурье (бпф)
- 2.3. Быстрая свертка
- 2.3.1. Понятие свертки
- 2.3.2. Обычный и быстрый алгоритм свертки
- 2.4. Быстрое умножение
- 2.4.1. Быстрое умножение чисел
- 1 Суммирование
- 4 Произведения чисел вдвое меньшей
- 2.4.2. Быстрое умножение матриц
- 2.4.3. Очень быстрое умножение числе (алгоритм Шенхаге – Штрассена)
- 3. Задачи на графах
- 3.1. Справочный материал
- 3.2. Поиск минимального остова в связном неориентированном взвешенном графе
- 3.3. Нахождение кратчайшего расстояния
- 3.3.1. Алгоритм Форда – Беллмана
- 3.3.2. Алгоритм Дейкстры
- 3.4. Нахождение диаметра, радиуса и центра графа
- 3.5. Задача об изоморфизме графов
- 3.6. Задача коммивояжера. Её решение методом ветвей и границ.
- Задачи динамического программирования
- Задачи динамического программирования. Её решение методом динамического программирования.
- 4.2. Задача об оптимальном наборе самолетом скорости и высоты
- 4.3. Задача грабителя (задача о рюкзаке)
- 4.4. Задача о перемножении матриц
- 5 Классы p и np
- 5.1 Машина Тьюринга
- 5.2 Недетерменированные машины Тьюринга(ндмт)
- 5.3 Сводимость. Np-полнота.
- 5.4 Иерархия по сложности. Труднорешаемые задачи.
- Классы сложности.
- 6 Неразрешимые задачи
- 6.1 Новая модель алгоритма вычислений.
- 6.2 Нумерация программ
- 6.3 Неразрешимые проблемы
- 6.4 Теорема об ускорении
- Лабораторные работы
- Расчетно-графическое задание
- Ответы к домашним заданиям