मान लीजिए कि हमें एक स्ट्रीम में नंबर मिल रहे हैं। प्रत्येक संख्या प्राप्त होने के बाद, अंतिम संख्याओं के भारित योग की गणना करने की आवश्यकता होती है, जहां वेट हमेशा समान होता है, लेकिन मनमाना होता है।
अगर हम कम्प्यूटेशन में मदद करने के लिए डेटा संरचना रखने की अनुमति देते हैं तो यह कितनी कुशलता से किया जा सकता है? क्या हम किसी भी समय प्राप्त होने वाली राशि की तुलना में से बेहतर कर सकते हैं , यानी हर बार राशि का पुन: उपयोग?
उदाहरण के लिए: मान लीजिए कि वजन । एक बिंदु पर हमारे पास अंतिम संख्या , और भारित योग ।
जब कोई अन्य संख्या, , प्राप्त होती है, तो हम को प्राप्त करने के लिए सूची को अपडेट करते हैं और हमें गणना करने की आवश्यकता होती है। ।एल 2 = ⟨ ख , ग , घ , ई ⟩ एस 2 = डब्ल्यू 1 * ख + डब्ल्यू 2 * ग + डब्ल्यू 3 * घ + डब्ल्यू 4 * ई
एफएफटी का उपयोग करते हुए विचार इस समस्या का एक विशेष मामला फास्ट फूरियर ट्रांसफॉर्म को नियोजित करके कुशलता से हल करने योग्य प्रतीत होता है। यहाँ, हम गुणकों में भारित गणना करते हैं । दूसरे शब्दों में, हम नंबर प्राप्त करते हैं और उसके बाद ही हम संबंधित तौला रकम की गणना कर सकते हैं । ऐसा करने के लिए, हमें कुल नंबरों में पिछले नंबरों (जिसके लिए रकम पहले ही गणना की जा चुकी है) और नए नंबरों की आवश्यकता है।एन एन एन एन - 1 एन 2 एन - 1
यदि इनपुट नंबरों का यह वेक्टर और वेट वेक्टर बहुपद के गुणांक और को परिभाषित करता है, तो Q में गुणांक के साथ उलट होता है, तो हम देखते हैं कि उत्पाद P (x) \ गुना Q (x) x है बहुपद जिसका गुणांक x ^ {N-1} से x ^ {2N-2} के सामने होता है, ठीक उसी तरह से भारित रकम जो हम चाहते हैं। इनकी गणना FFT का उपयोग करके \ Theta (N * \ log (N)) समय के साथ की जा सकती है, जो हमें औसत प्रति इनपुट नंबर के लिए Θ (\ log (N)) समय देती है।P ( x ) Q ( x ) Q P ( x ) × Q ( x ) x N - 1 x 2 N - 2 ∗ ( N Θ लॉग ( N ) ) Θ ( log ( N ) )
हालाँकि यह समस्या का एक हल नहीं है, जैसा कि कहा गया है, क्योंकि यह आवश्यक है कि भारित राशि की गणना हर बार कुशलता से की जाए जब एक नया नंबर प्राप्त होता है - हम गणना में देरी नहीं कर सकते।