แสดงวิธีการทำ FFT ด้วยมือ


27

สมมติว่าคุณมีสองพหุนาม:และ23+x2x2+2

ฉันพยายามที่จะเข้าใจว่า FFT ช่วยให้เราคูณชื่อพหุนามทั้งสองนี้อย่างไร อย่างไรก็ตามฉันไม่พบตัวอย่างผลงานใด ๆ บางคนสามารถแสดงให้ฉันเห็นได้ว่าอัลกอริทึม FFT จะทวีคูณชื่อพหุนามทั้งสองนี้อย่างไร (หมายเหตุ: ไม่มีอะไรพิเศษเกี่ยวกับพหุนามเหล่านี้ แต่ฉันต้องการให้มันง่ายเพื่อให้ง่ายต่อการติดตาม)

ฉันได้ดูอัลกอริธึมใน pseudocode แต่ดูเหมือนว่าพวกเขาทั้งหมดจะมีปัญหา (อย่าระบุว่าอินพุตควรเป็นอะไร, ตัวแปรที่ไม่ได้กำหนด) และน่าประหลาดใจที่ฉันไม่สามารถหาได้ว่ามีใครบ้างที่เดินผ่าน (ด้วยมือ) ตัวอย่างการคูณพหุนามด้วย FFT


2
วิกิพีเดียช่วยให้นี้ภาพที่ดีสำหรับจำนวนเต็มคูณผ่าน FFT แต่ฉันคิดว่าแม้ที่ชัดเจนมากขึ้นขั้นตอนโดยขั้นตอนที่อาจจะเป็นประโยชน์
Realz Slaw

คำตอบ:


27

สมมติว่าเราใช้รากที่สี่ของความสามัคคีซึ่งสอดคล้องกับการแทนสำหรับxนอกจากนี้เรายังใช้ decimation-in-time มากกว่า decimation-in-frequency ในอัลกอริทึม FFT (นอกจากนี้เรายังใช้การดำเนินการย้อนกลับแบบบิตอย่างราบรื่น)1,i,1,ix

เพื่อคำนวณการแปลงพหุนามครั้งแรกเราเริ่มต้นด้วยการเขียนสัมประสิทธิ์: ฟูริเยร์เปลี่ยนของค่าสัมประสิทธิ์แม้คือและค่าสัมประสิทธิ์แปลกคือ1,1(การแปลงนี้เป็นเพียง .) ดังนั้นการแปลงพหุนามครั้งแรกคือ นี้จะได้รับใช้ ,O_1 (จากการคำนวณตัวประกอบทวีคูณ)

3,1,0,0.
3,03,31,01,1a,ba+b,ab
4,3+i,2,3i.
X0,2=E0±O0X1,3=E1iO1

ลองทำเช่นเดียวกันกับพหุนามที่สอง ค่าสัมประสิทธิ์เป็น ค่าสัมประสิทธิ์แม้แปลงและค่าสัมประสิทธิ์แปลกแปลง0,0ดังนั้นการแปลงของพหุนามที่สองคือ

2,0,2,0.
2,24,00,00,0
4,0,4,0.

เราได้การแปลงฟูริเยร์ของพหุนามผลิตภัณฑ์โดยการคูณการแปลงฟูริเยร์ทั้งสองแปลงเป็นจุด: มันยังคงคำนวณการแปลงฟูริเยร์ผกผัน ค่าสัมประสิทธิ์แม้ผกผันเปลี่ยนไปและค่าสัมประสิทธิ์แปลกผกผันแปลง0,0(การแปลงผกผันคือ ) ดังนั้นการแปลงของพหุนามผลิตภัณฑ์คือ นี้จะได้รับใช้ , 2 เราได้รับคำตอบที่ต้องการ

16,0,8,0.
16,812,40,00,0x,y(x+y)/2,(xy)/2
6,2,6,2.
X0,2=(E0±O0)/2X1,3=(E1iO1)/2
(3+x)(2+2x2)=6+2x+6x2+2x3.


คุณมาถึงที่ 6,2 6, 2 ได้อย่างไร
ลาร์ส

ฉันกำหนดสูตร: ,โดยที่ ( ) เป็นสิ่งที่ตรงกันข้าม เปลี่ยนของค่าสัมประสิทธิ์แม้ (แปลก) ที่ได้รับผ่านสูตร 2 โปรดดูคำตอบอีกครั้ง - การคำนวณทั้งหมดอยู่ที่นั่น X0,2=(E0±O2)/2X1,3=(E1iO1)/2E0,E1O1,O2x,y(x+y)/2,(xy)/2
Yuval Filmus

ทำไมคุณถึงใช้สัมประสิทธิ์คู่ถึงสองครั้ง? 3,3 -> 3,3,3,3 -> 3 + 1, 3-i, 3 + -1,3 - i?
Aage Torleif

สูตรเหล่านี้สำหรับและขยายไปถึงองศาที่สูงขึ้นได้อย่างไร เครื่องหมายบวก / ลบเพียงแค่พลิกต่อไปหรือไม่ ตัวอย่างเช่นอย่างไร X0,2X1,3X0,2,4
Bobby Lee

@ BobLee ฉันแนะนำให้คุณอ่านวรรณกรรมบางเรื่องเกี่ยวกับ FFT
Yuval Filmus

7

กำหนดพหุนามที่และdeg(A) = q deg(B) = pdeg(C) = q + p

ในกรณีdeg(C) = 1 + 2 = 3นี้

A=3+xB=2x2+2C=AB=?

เราสามารถหาค่า C ในเวลาได้อย่างง่ายดายโดยการคูณค่าสัมประสิทธิ์ของเดียรัจฉาน โดยใช้ FFT (และผกผัน FFT) เราสามารถบรรลุเป้าหมายนี้ในเวลา อย่างชัดเจน:O(n2)O(nlog(n))

  1. แปลงการแทนค่าสัมประสิทธิ์ของ A และ B เป็นการแทนค่า กระบวนการนี้เรียกว่าการประเมินผล การแสดงแบ่งและพิชิต (D & C) สำหรับการนี้จะใช้เวลาเวลาO(nlog(n))
  2. การคูณแบบหลายส่วนประกอบด้วยพหุนามในการแสดงค่าของพวกมัน ส่งคืนการแทนค่าของ C = A * B นี้ใช้เวลาเวลาO(n)
  3. Invert C โดยใช้ inverse FFT เพื่อรับ C ในการแทนค่าสัมประสิทธิ์ กระบวนการนี้เรียกว่าการแก้ไขและยังใช้เวลาเวลาO(nlog(n))

เราจะแสดงพหุนามแต่ละอันเป็นเวกเตอร์ที่มีค่าเป็นสัมประสิทธิ์ เราแผ่นเวกเตอร์ด้วย 0 ขึ้นอยู่กับอำนาจที่เล็กที่สุดของทั้งสอง(C) ดังนั้น4 การเลือกพลังสองวิธีทำให้เราสามารถใช้อัลกอริทึมการหารและการชนะแบบเรียกซ้ำได้n=2k,ndeg(C)n=4

A=3+x+0x2+0x3a=[3,1,0,0]B=2+0x+2x+0x3b=[2,0,2,0]

ให้เป็นค่าแทน A และ B ตามลำดับ ขอให้สังเกตว่า FFT (Fast แปลงฟูเรีย ) เป็นแปลงเชิงเส้น ( เส้นแผนที่ ) M ดังนั้นA,BM

A=MaB=Mb

เรากำหนดโดยที่เป็นรากที่ซับซ้อนรากที่ซับซ้อนของความสามัคคี ขอให้สังเกตในตัวอย่างนี้ นอกจากนี้ยังแจ้งให้ทราบว่ารายการในที่แถวและคอลัมน์{} ดูเพิ่มเติมเกี่ยวกับเมทริกซ์ DFT ที่นี่M=Mn(ω)ωnthn = 4jthkthωnjk

M4(w)=[111...11ω1ω2...ωn11ω2ω4...............ωjk...1ωn1ω2(n1)...ω(n1)(n1)]=[11111ωω2ω31ω2ω4ω61ω3ω6ω9]

เมื่อได้รับรากของความเป็นเอกภาพเรามีความเท่าเทียมกันที่ได้รับคำสั่ง:ω4=4th

{ω0,ω1,ω2,ω3,ω4,ω5,...}={1,i,1,i,1,i,...}

สิ่งนี้สามารถมองเห็นได้เมื่อวนซ้ำผ่านรูทของหน่วยยูนิตในทิศทางทวนเข็มนาฬิกา

สังเกตเห็นmod nธรรมชาติเช่นและω6=ω6modn=ω2=1i=ω3=ω3+n

เพื่อให้ขั้นตอนที่ 1 ( การประเมินผล ) เสร็จสมบูรณ์เราจะพบโดยดำเนินการA,B

A=Ma=[11111ωω2ω31ω2ω4ω61ω3ω6ω9][3100]=[3+13+1ω3+ω23+ω3]=[43+i23i]B=Mb=[11111ωω2ω31ω2ω4ω61ω3ω6ω9][2020]=[2+22+2ω22+2ω42+2ω6]=[4040]

ขั้นตอนนี้สามารถทำได้โดยใช้อัลกอริธึม D&C (เกินขอบเขตของคำตอบนี้)

ทวีคูณส่วนประกอบที่ชาญฉลาด (ขั้นตอนที่ 2)AB

AB=[43+i23i][4040]=[16080]=C

ในที่สุดขั้นตอนสุดท้ายคือการแทน C 'ลงในค่าสัมประสิทธิ์ แจ้งให้ทราบ

C=McM1C=M1Mcc=M1C

แจ้งให้ทราบล่วงหน้า 1และJ}Mn1=1nMn(ω1)ωj=ωn/2+j

Mn1=14[11111ω1ω2ω31ω2ω4ω61ω3ω6ω9]=14[11111i1i11111i1i]

ωjสามารถมองเห็นได้โดยวนซ้ำของรากของหน่วยวงกลมในทิศทางตามเข็มนาฬิกา

{ω0,ω1,ω2,ω3,ω4,ω5,...}={1,i,1,i,1,i,...}

ยิ่งกว่านั้นมันเป็นความจริงที่ว่าเมื่อรากของความสามัคคีความเท่าเทียมถือ (คุณเห็นสาเหตุไหม)nthωj=ωnj

จากนั้น

c=M1C=1nMn(w1)=14[11111i1i11111i1i][16080]=[(16+8)/4(168)/4(16+8)/4(168)/4]=[6262]

ดังนั้นเราจึงได้พหุนาม 1 : สูตรผกผันหน้า 73, อัลกอริทึมโดย Dasgupta และ อัล (C) 2006

C=AB=6+2x+6x2+2x3

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.