Chỉ ra cách làm FFT bằng tay


27

Giả sử bạn có hai đa thức: và .3+x2x2+2

Tôi đang cố gắng hiểu làm thế nào FFT giúp chúng tôi nhân hai đa thức này. Tuy nhiên, tôi không thể tìm thấy bất kỳ ví dụ nào. Ai đó có thể chỉ cho tôi cách thuật toán FFT sẽ nhân hai đa thức này không. (Lưu ý: không có gì đặc biệt về các đa thức này, nhưng tôi muốn giữ nó đơn giản để dễ theo dõi hơn.)

Tôi đã xem xét các thuật toán trong mã giả, nhưng tất cả chúng dường như có vấn đề (không xác định đầu vào là gì, các biến không xác định). Và thật ngạc nhiên, tôi không thể tìm thấy nơi mà bất kỳ ai đã thực sự đi qua (bằng tay) một ví dụ về nhân đa thức bằng FFT.


2
Wikipedia giữ hình ảnh đẹp này để nhân số nguyên qua FFT, nhưng tôi nghĩ rằng từng bước rõ ràng hơn có thể hữu ích.
Realz Slaw

Câu trả lời:


27

Giả sử chúng ta sử dụng gốc thứ tư của sự thống nhất, tương ứng với việc thay thế cho . Chúng tôi cũng sử dụng decimation-in-time thay vì decimation-in-tần số trong thuật toán FFT. (Chúng tôi cũng áp dụng thao tác đảo ngược bit một cách liền mạch.)1,i,1,ix

Để tính toán biến đổi của đa thức đầu tiên, chúng tôi bắt đầu bằng cách viết các hệ số: Biến đổi Fourier của các hệ số chẵn là và của các hệ số lẻ là . (Biến đổi này chỉ là .) Do đó biến đổi của đa thức đầu tiên là Điều này thu được bằng , . (Từ tính toán yếu tố twiddle).

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

Chúng ta hãy làm tương tự cho đa thức thứ hai. Các hệ số là Các hệ số chẵn biến đổi thành và các hệ số lẻ biến đổi thành . Do đó biến đổi của đa thức thứ hai là

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

Chúng ta thu được biến đổi Fourier của đa thức sản phẩm bằng cách nhân hai biến đổi Fourier theo chiều dọc: Nó vẫn còn để tính toán biến đổi Fourier ngược. Các hệ số chẵn biến đổi nghịch đảo thành và các hệ số lẻ biến đổi nghịch đảo thành . (Biến đổi nghịch đảo là ) Do đó, biến đổi của đa thức sản phẩm là Điều này thu được bằng , . Chúng tôi đã thu được câu trả lời mong muốn

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.


Làm thế nào bạn đến 6,2 6, 2?
Lars

Tôi đã đưa ra các công thức: , , trong đó ( ) là nghịch đảo biến đổi các hệ số chẵn (lẻ), thu được thông qua công thức . Hãy nhìn vào câu trả lời một lần nữa - tất cả các tính toán đều ở đó. X0,2=(E0±O2)/2X1,3=(E1iO1)/2E0,E1O1,O2x,y(x+y)/2,(xy)/2
Yuval Filmus

Tại sao bạn sử dụng các hệ số chẵn hai lần? 3,3 -> 3,3,3,3. -> 3 + 1, 3-i, 3 + -1,3 - i?
Aage Torleif

Làm thế nào để các công thức cho và mở rộng đến mức độ cao hơn? Làm dấu cộng / trừ chỉ tiếp tục lật? Ví dụ: gì? X0,2X1,3X0,2,4
Bobby Lee

@BulkLee Tôi khuyến khích bạn đọc một số tài liệu về FFT.
Yuval Filmus

7

Xác định các đa thức, ở đâu deg(A) = qdeg(B) = p. Các deg(C) = q + p.

Trong trường hợp này , deg(C) = 1 + 2 = 3.

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

Chúng ta có thể dễ dàng tìm thấy C trong thời gian bằng cách nhân hệ số vũ phu. Bằng cách áp dụng FFT (và FFT nghịch đảo), chúng ta có thể đạt được điều này trong thời gian . Rõ ràng:O(n2)O(nlog(n))

  1. Chuyển đổi biểu diễn hệ số của A và B thành biểu diễn giá trị của nó. Quá trình này được gọi là đánh giá . Việc thực hiện Phân chia và chinh phục (D & C) cho việc này sẽ mất thời gian .O(nlog(n))
  2. Nhân thành phần-khôn ngoan các đa thức trong biểu diễn giá trị của chúng. Điều này trả về đại diện giá trị của C = A * B. Điều này mất thời gian .O(n)
  3. Đảo ngược C bằng cách sử dụng FFT nghịch đảo để có C trong biểu diễn hệ số của nó. Quá trình này được gọi là nội suy và nó cũng mất thời gian .O(nlog(n))

Tiếp tục, chúng tôi biểu diễn mỗi đa thức dưới dạng một vectơ có giá trị là các hệ số của nó. Chúng ta đệm vectơ với 0 đến công suất nhỏ nhất bằng hai, . Do đó . Chọn một sức mạnh của hai cung cấp cho chúng ta một cách để áp dụng đệ quy thuật toán phân chia và chinh phục của chúng ta.n=2k,ndeg(C)n=4

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

Đặt là giá trị đại diện của A và B. Chú ý rằng FFT (Fast Fourier Transform ) là một biến đổi tuyến tính ( biến đổi tuyến tính ) và có thể được biểu diễn dưới dạng một ma trận, . Như vậyA,BM

A=MaB=Mb

Chúng tôi xác định trong đó là gốc phức tạp rễ phức tạp của sự thống nhất. Lưu ý , trong ví dụ này. Cũng lưu ý rằng mục nhập trong hàng và cột là . Xem thêm về ma trận DFT tại đâyM=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]

Với các gốc của sự thống nhất, chúng ta có tập đẳng thức được đặt hàng:ω4=4th

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

Điều này có thể được hình dung như lặp lại các gốc thông qua của vòng tròn đơn vị theo hướng ngược chiều kim đồng hồ .

Ngoài ra, hãy chú ý đến mod nbản chất, tức là vàω6=ω6modn=ω2=1i=ω3=ω3+n

Để hoàn thành bước 1 ( đánh giá ), chúng tôi tìm bằng cách thực hiệnA,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]

Bước này có thể đạt được bằng cách sử dụng thuật toán D & C (vượt quá phạm vi của câu trả lời này).

Nhân thành phần khôn ngoan (bước 2)AB

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

Cuối cùng, bước cuối cùng là biểu diễn C 'thành các hệ số. Để ý

C=McM1C=M1Mcc=M1C

Lưu ý 1 và .Mn1=1nMn(ω1)ωj=ωn/2+j

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

ωj có thể được hình dung như lặp lại các gốc thông qua của vòng tròn đơn vị theo chiều kim đồng hồ .

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

Ngoài ra, sự thật là, với gốc của sự thống nhất, sự bình đẳng giữ. (Bạn có thấy tại sao không?)nthωj=ωnj

Sau đó,

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

Do đó, chúng ta nhận được đa thức 1 : Công thức đảo ngược pg 73, Thuật toán của Dasgupta et. al. (C) 2006

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.