Suponha que estamos recebendo números em um fluxo. Depois que cada número é recebido, uma soma ponderada dos últimos números precisa ser calculada, onde os pesos são sempre os mesmos, mas arbitrários.
Com que eficiência isso pode ser feito se tivermos permissão para manter uma estrutura de dados para ajudar no cálculo? Podemos fazer algo melhor que , ou seja, recalcular a soma cada vez que um número é recebido?
Por exemplo: Suponhamos que os pesos são . Em um ponto que tem a lista dos últimos números , e a soma ponderada .
Quando um outro número, , é recebida, que actualizar a lista para obter e é preciso calcular .
Consideração sobre o uso da FFT Um caso especial desse problema parece ser solucionável com eficiência, empregando a Transformada rápida de Fourier. Aqui, nós calcular as somas ponderadas em múltiplos de N . Em outras palavras, nós recebemos N números e só então podemos calcular as N somas ponderadas correspondentes . Para fazer isso, precisamos de números anteriores N - 1 (para os quais as somas já foram computadas) e N novos números, no total de 2 números N - 1 .
Se esse vetor de números de entrada e o vetor de peso definem os coeficientes dos polinômios P ( x ) e Q ( x ) , com os coeficientes em Q invertidos, vemos que o produto P ( x ) × Q ( x ) é um polinômio cujos coeficientes na frente de x N - 1 até x 2 N - 2 são exatamente as somas ponderadas que buscamos. Estes podem ser calculados usando FFT em Θ ( N ∗ log , que nos dá uma média de Θ ( log ( N ) ) por número de entrada.
No entanto, essa não é uma solução para o problema, conforme declarado, porque é necessário que a soma ponderada seja computada com eficiência cada vez que um novo número for recebido - não podemos atrasar o cálculo.