Реалізуйте дискретні перетворення Фур'є (DFT) для послідовності будь-якої довжини. Це може бути реалізовано як функція або програма, і послідовність може бути задана як аргумент, або за допомогою стандартного введення.
Алгоритм обчислює результат на основі стандартного DFT у прямому напрямку. Послідовність введення має довжину N
і складається з [x(0), x(1), ..., x(N-1)]
. Вихідна послідовність матиме однакову довжину і складається з того, [X(0), X(1), ..., X(N-1)]
де кожен X(k)
визначається співвідношенням нижче.
Правила
- Це є код-гольф тому виграє найкоротше рішення.
- Вбудовані, які обчислюють DFT вперед або назад (також відомий як зворотний) напрямків, не дозволяються.
- Неточності з плаваючою комою не будуть зараховані проти вас.
Випробування
DFT([1, 1, 1, 1]) = [4, 0, 0, 0]
DFT([1, 0, 2, 0, 3, 0, 4, 0]) = [10, -2+2j, -2, -2-2j, 10, -2+2j, -2, -2-2j]
DFT([1, 2, 3, 4, 5]) = [15, -2.5+3.44j, -2.5+0.81j, -2.5-0.81j, -2.5-3.44j]
DFT([5-3.28571j, -0.816474-0.837162j, 0.523306-0.303902j, 0.806172-3.69346j, -4.41953+2.59494j, -0.360252+2.59411j, 1.26678+2.93119j] = [2, -3j, 5, -7j, 11, -13j, 17]
Довідка
Був попередній виклик пошуку DFT за допомогою алгоритму FFT для послідовностей довжиною, рівній потужності 2. Ви можете знайти деякі хитрощі, які можуть вам допомогти тут. Майте на увазі, що ця проблема не обмежує вас ніякою складністю, а також вимагає, щоб ваше рішення працювало на послідовності будь-якої довжини.