Припустимо, ми отримуємо номери в потоці. Після отримання кожного числа необхідно обчислити зважену суму останніх чисел, де ваги завжди однакові, але довільні.
Наскільки ефективно це можна зробити, якщо нам дозволяють зберігати структуру даних, щоб допомогти в обчисленні? Чи можемо ми зробити краще, ніж , тобто перерахувати суму щоразу, коли число отримане?
Наприклад: Припустимо, ваги . В один момент ми маємо список останніх чисел , і зважена сума .Н L 1 = ⟨ в , б , з , д ⟩ > S 1 = W 1 * + ш 2 * б + ш 3 * з + ш 4 * г
Коли буде отримано інше число, , ми оновлюємо список, щоб отримати і нам потрібно обчислити .л 2 = ⟨ б , з , д , е ⟩ S 2 = ш 1
Розгляд використання FFT Особливий випадок цієї проблеми, як видається, вирішується ефективно шляхом використання Швидкої перетворення Фур'є. Тут ми обчислимо зважені суми в упаковці . Іншими словами, ми отримуємо чисел і тільки тоді ми можемо обчислити відповідні зважених сум. Для цього нам потрібні минулі номери (для яких вже були обчислені суми) та нових чисел, загалом числа.N
Якщо цей вектор вхідних чисел і ваговий вектор визначають коефіцієнти многочленів і , а коефіцієнти в зворотні, ми бачимо, що добуток є a многочлен, коефіцієнти якого перед до це саме зважені суми, яких ми шукаємо. Їх можна обчислити, використовуючи FFT за час, що дає нам у середньому час на номер введення.
Це, однак, не є вирішенням проблеми, як заявлено, оскільки потрібно, щоб зважена сума була ефективно обчислена щоразу, коли надходило нове число - ми не можемо затримувати обчислення.