Giả sử chúng ta đang nhận được số trong một luồng. Sau khi mỗi số được nhận, một tổng trọng số của số cuối cùng cần được tính, trong đó các trọng số luôn giống nhau, nhưng tùy ý.
Làm thế nào hiệu quả có thể được thực hiện nếu chúng ta được phép giữ một cấu trúc dữ liệu để giúp tính toán? Chúng ta có thể làm tốt hơn , tức là tính lại tổng số mỗi khi nhận được một số?
Ví dụ: Giả sử các trọng số là . Tại một thời điểm, chúng tôi có danh sách số cuối và tổng trọng số .
Khi nhận được một số khác, , chúng tôi cập nhật danh sách để nhận và chúng tôi cần tính .L 2 = ⟨ b , c , d , e ⟩ S 2 = w 1 * b + w 2 * c + w 3 * d + w 4 * e
Cân nhắc sử dụng FFT Một trường hợp đặc biệt của vấn đề này dường như có thể giải quyết hiệu quả bằng cách sử dụng Biến đổi Fourier nhanh. Ở đây, chúng tôi tính toán số tiền nặng trong bội số của . Nói cách khác, chúng tôi nhận được số và chỉ sau đó chúng tôi mới có thể tính được tổng tương ứng . Để làm điều này, chúng ta cần số quá khứ (trong đó các khoản tiền đã được tính toán) và số mới, trong tổng số .N N N N - 1 N 2 N - 1
Nếu vectơ này của các số đầu vào và vectơ trọng số xác định các hệ số của đa thức và , với các hệ số trong đảo ngược, chúng ta thấy rằng sản phẩm là một đa thức có hệ số đứng trước cho đến chính xác là các tổng có trọng số mà chúng ta tìm kiếm. Chúng có thể được tính bằng cách sử dụng FFT trong thời gian , cho chúng ta thời gian trung bình Θ (\ log (N)) trên mỗi số đầu vào.P ( x ) Q ( x ) Q P ( x ) × Q ( x ) x N - 1 x 2 N - 2 Θ ( N * log ( N ) ) Θ ( log ( N ) )
Tuy nhiên, đây không phải là một giải pháp cho vấn đề như đã nêu, vì yêu cầu tổng trọng số được tính toán hiệu quả mỗi khi nhận được một số mới - chúng tôi không thể trì hoãn việc tính toán.