1
ผลรวมถ่วงน้ำหนักของหมายเลข N ล่าสุด
สมมติว่าเราได้รับตัวเลขในสตรีม หลังจากได้รับแต่ละตัวเลขแล้วจะต้องคำนวณผลรวมถ่วงน้ำหนักของตัวเลขสุดท้ายโดยที่น้ำหนักจะเหมือนกันเสมอ แต่ตามอำเภอใจNNN ทำได้อย่างมีประสิทธิภาพแค่ไหนหากเราได้รับอนุญาตให้เก็บโครงสร้างข้อมูลไว้เพื่อช่วยในการคำนวณ? เราสามารถทำได้ดีกว่าคือการคำนวณผลรวมทุกครั้งที่ได้รับตัวเลขหรือไม่Θ(N)Θ(N)\Theta(N) ตัวอย่างเช่นสมมติว่าน้ำหนักที่มีw_4 เมื่อมาถึงจุดหนึ่งที่เรามีรายชื่อของที่ผ่านมาตัวเลขและน้ำหนักรวม dW=⟨w1,w2,w3,w4⟩W=⟨w1,w2,w3,w4⟩W= \langle w_1, w_2, w_3, w_4\rangleNNNL1=⟨a,b,c,d⟩>L1=⟨a,b,c,d⟩>L_1= \langle a, b, c, d \rangle>S1=w1∗a+w2∗b+w3∗c+w4∗dS1=w1∗a+w2∗b+w3∗c+w4∗dS_1=w_1*a+w_2*b+w_3*c+w_4*d เมื่อจำนวนอีกจะได้รับเราปรับปรุงรายการที่จะได้รับและเราจำเป็นต้องคำนวณ .eeeL2=⟨b,c,d,e⟩L2=⟨b,c,d,e⟩L_2= \langle b,c,d,e\rangleS2=w1∗b+w2∗c+w3∗d+w4∗eS2=w1∗b+w2∗c+w3∗d+w4∗eS_2=w_1*b+w_2*c+w_3*d+w_4*e การพิจารณาโดยใช้ FFT กรณีพิเศษของปัญหานี้ดูเหมือนจะแก้ไขได้อย่างมีประสิทธิภาพโดยใช้การแปลงฟูริเยร์อย่างรวดเร็ว ที่นี่เราคำนวณจำนวนเงินชั่งน้ำหนักหลายรายการNกล่าวอีกนัยหนึ่งเราได้รับหมายเลขNและจากนั้นเราสามารถคำนวณผลรวมNน้ำหนักที่เกี่ยวข้อง การทำเช่นนี้เราต้องN-1หมายเลขที่ผ่านมา (ซึ่งจำนวนเงินที่ได้รับการคำนวณแล้ว) และยังไม่มีตัวเลขใหม่ทั้งหมด2N-1หมายเลขSSSNNNNNNNNNN−1N−1N-1NNN2N−12N−12N-1 ถ้าเวกเตอร์ของตัวเลขอินพุตและเวกเตอร์น้ำหนักWWWกำหนดสัมประสิทธิ์ของพหุนามP(x)P(x)P(x)และQ(x)Q(x)Q(x)โดยมีค่าสัมประสิทธิ์ในQQQกลับด้านเราจะเห็นว่าผลิตภัณฑ์P(x)×Q(x)P(x)×Q(x)P(x)\times Q(x)เป็น พหุนามซึ่งมีค่าสัมประสิทธิ์อยู่ด้านหน้าxN−1xN−1x^{N-1}สูงสุดx2N−2x2N−2x^{2N-2}เป็นผลรวมของน้ำหนักที่เราแสวงหา สิ่งเหล่านี้สามารถคำนวณได้โดยใช้ FFT ในเวลาΘ(N∗log(N))Θ(N∗log(N))\Theta(N*\log (N))ซึ่งทำให้เรามีเวลาเฉลี่ยΘ(log(N))Θ(log(N))Θ(\log (N))ต่อจำนวนอินพุต อย่างไรก็ตามนี่ไม่ใช่วิธีแก้ปัญหาตามที่ระบุไว้เนื่องจากจำเป็นต้องมีการคำนวณผลรวมถ่วงน้ำหนักอย่างมีประสิทธิภาพทุกครั้งที่รับหมายเลขใหม่ - เราไม่สามารถหน่วงเวลาการคำนวณได้