Алгоритм Гуда — Томаса

Материал из testwiki
Перейти к навигации Перейти к поиску

Алгоритм Гуда — Томасаалгоритм вычисления быстрого преобразования Фурье, применяющийся к последовательностям, длина которых равна произведению двух взаимно простых чисел.

Алгоритм Гуда — Томаса не следует путать с алгоритмом Кули — Тьюки, где делители длины преобразования не обязаны быть взаимно простыми. Алгоритм Гуда — Томаса ограничен этим условием, а также задействует более сложную схему переиндексации, чем алгоритм Кули — Тьюки, но при этом не требует промежуточного умножения на комплексные множители и потому несколько проще с точки зрения вычисленийШаблон:Sfn.

Построение алгоритма

Для произвольного натурального числа n дискретным преобразованием Фурье комплексного вектора x(j), где j=0,,n1, называется комплексный вектор X(k), где k=0,,n1, компоненты которого задаются формулой

X(k)=j=0n1x(j)ωkj,k=0,,n1,

где ω=e2πin.

Пусть n=n1n2, где n1 и n2 взаимно просты. Пусть также j1 и j2 — новые входные индексы, задающиеся соотношениямиШаблон:Sfn

j1=j (mod n1), j2=j (mod n2).

Отсюда по китайской теореме об остатках и соотношению Безу следует, что существуют такие целые числа N1 и N2, что

j=j1N2n2+j2N1n1 (mod n)

и N1n1+N2n2=1. Аналогично, пусть k1 и k2 — новые выходные индексы, задающиеся соотношениями

k1=N2k (mod n1), k2=N1k (mod n2).

Тогда

k=n2k1+n1k2 (mod n).

С использованием обозначений

x(j1,j2)=x(j1N2n2+j2N1n1),
X(k1,k2)=X(n2k1+n1k2),
β=ωN2(n2)2,
γ=ωN1(n1)2,

исходная формула принимает вид

X(k1,k2)=j1=0n11j2=0n21βj1k1γj2k2x(j1,j2),

то есть произошёл переход от одномерного преобразования длины n к двумерному преобразованию размера (n1×n2). При этом число умножений и число сложений стало равно примерно n(n1+n2)Шаблон:Sfn.

Примечания

Шаблон:Примечания

Литература