Supponiamo di ricevere numeri in uno stream. Dopo aver ricevuto ciascun numero, è necessario calcolare una somma ponderata degli ultimi numeri, in cui i pesi sono sempre gli stessi, ma arbitrari.
Quanto efficacemente può essere fatto se ci è permesso mantenere una struttura di dati per aiutare con il calcolo? Possiamo fare di meglio di , ovvero ricalcolare la somma ogni volta che viene ricevuto un numero?
Ad esempio: supponiamo che i pesi siano . A un certo punto abbiamo l'elenco degli ultimi numeri L_1 = \ langle a, b, c, d \ rangle> e la somma ponderata S_1 = w_1 * a + w_2 * b + w_3 * c + w_4 * d .
Quando viene ricevuto un altro numero, , aggiorniamo l'elenco per ottenere e dobbiamo calcolare .
Considerazione sull'uso di FFT Un caso speciale di questo problema sembra essere risolvibile in modo efficiente impiegando la trasformata di Fourier veloce. Qui, calcoliamo le somme pesate in multipli di . In altre parole, riceviamo numeri e solo allora possiamo calcolare le corrispondenti pesate. Per fare ciò, abbiamo bisogno numeri passati N-1 (per i quali sono già state calcolate le somme) e nuovi numeri, in totale numeri .
Se questo vettore di numeri di input e il vettore di peso definiscono i coefficienti dei polinomi e , con coefficienti in invertiti, vediamo che il prodotto è un polinomio i cui coefficienti davanti a fino a sono esattamente le somme ponderate che cerchiamo. Questi possono essere calcolati usando FFT in tempo, che ci dà una media di tempo per numero di input.
Questa non è tuttavia una soluzione al problema come indicato, poiché è necessario che la somma ponderata sia calcolata in modo efficiente ogni volta che viene ricevuto un nuovo numero - non possiamo ritardare il calcolo.