Angenommen, wir empfangen Zahlen in einem Stream. Nachdem jede Zahl empfangen wurde, muss eine gewichtete Summe der letzten Zahlen berechnet werden, wobei die Gewichte immer gleich, aber willkürlich sind.
Wie effizient kann dies durchgeführt werden, wenn wir eine Datenstruktur zur Unterstützung der Berechnung beibehalten dürfen? Können wir etwas Besseres tun als , dh die Summe jedes Mal neu berechnen, wenn eine Zahl empfangen wird?
Beispiel: Angenommen, die Gewichte lauten . An einem Punkt haben wir die Liste der letzten Zahlen und die gewichtete Summe .
Wenn eine andere Zahl, , empfangen wird, aktualisieren wir die Liste, um und wir müssen .
Berücksichtigung der Verwendung von FFT Ein Sonderfall dieses Problems scheint durch die Verwendung der schnellen Fourier-Transformation effizient lösbar zu sein. Hier berechnen wir die gewogenen Summen ein Vielfaches von . Mit anderen Worten, wir erhalten Zahlen und können nur dann die entsprechenden gewogenen Summen berechnen . Dazu benötigen wir vergangene Zahlen (für die bereits Summen berechnet wurden) und neue Zahlen, insgesamt Zahlen.
Wenn dieser Vektor von Eingangszahlen und der Gewichtsvektor die Koeffizienten der Polynome und , wobei die Koeffizienten in umgekehrt sind, sehen wir, dass das Produkt ist Polynom, dessen Koeffizienten vor bis zu genau die gewichteten Summen sind, die wir suchen. Diese können mithilfe der FFT in berechnet werden. Dies ergibt einen Durchschnitt von average Zeit pro eingegebener Zahl.P ( x ) Q ( x ) Q P ( x ) × Q ( x ) × N - 1 × 2 N - 2 ≤ ( N ≤ log ( N ) ) ≤ ( log ( N ) )
Dies ist jedoch keine Lösung für das angegebene Problem, da es erforderlich ist, dass die gewichtete Summe bei jedem Empfang einer neuen Zahl effizient berechnet wird - wir können die Berechnung nicht verzögern.