Bài toán nhân đa thức – Phép biến đổi Fourier nhanh (Fast Fourier Transform) – FFT
Posted by Trần Quốc Long trên Tháng Một 12, 2009
Bài toán nhân đa thức: Cho 2 đa thức và , tính đa thức . Nghĩa là tìm các hệ số của đa thức (Do có bậc nên có bậc lớn nhất là ).
Công thức của các hệ số là
trong đó nếu ta đặt . Như vậy, để tính tất cả các hệ số của đa thức bằng công thức trên ta cần phép tính. Tuy nhiên, ta có thể tính các hệ số của đa thức chỉ với độ phức tạp bằng phép biến đổi Fourier nhanh (Fast Fourier Transform – FFT).
Một số ý tưởng dẫn đến thuật toán FFT:
- Một đa thức bậc nhỏ hơn hoàn toàn xác định nếu ta biết giá trị của đa thức tại điểm phân biệt. Tức là nếu biết thì sẽ tính được và ngược lại.
- Như vậy, nếu ta tính được giá trị của đa thức tại các điểm thì do ta dễ dàng tính được , nên đa thức và các hệ số của nó hoàn toàn xác định được.
- Giả sử chẵn và đa thức , xét 2 đa thức sau
sử dụng các hệ số bậc chẵn của
sử dụng các hệ số bậc lẻ củata thấy . Do đó nếu ta chọn tập các điểm sao cho
thì việc tính giá trị của đa thức tại điểm được quy về tính giá trị 2 đa thức (có bậc nhỏ hơn ) tại điểm .
- Nếu tại điểm mới ta vẫn có tính chất một nửa số điểm trái dấu với nửa số điểm còn lại thì ta có thể tiếp tục đệ quy. Như vậy, độ phức tạp để tính toán giá trị đa thức tại điểm có công thức
trong đó là độ phức tạp của 2 bài toán con, còn là độ phức tạp khi ta sử dụng công thức để kết hợp kết quả của 2 bài toán con. Theo định lý tổng quát, ta có giống trường hợp thuật toán sắp xếp trộn (Merge Sort).
- Tuy nhiên, để trong điểm có một nửa số điểm trái dấu với nửa số điểm còn lại, các điểm không thể là số thực vì . Như vậy, ta phải sử dụng số phức.
- Để ý rằng, ở trường hợp cơ sở, , nếu ta luôn chọn để tính giá trị đa thức thì:Ở bước đệ quy trước đó, ta có các điểm
Ở bước đệ quy trước đó, ta có các điểm
……
Ở bước đệ quy với đa thức bậc nhỏ hơn ta có các điểm là căn phức bậc của 1 (n-th complex roots of unity).
Căn phức bậc của 1:
Từ công thức nổi tiếng của Euler , ta có
Nghĩa là là căn phức bậc của .
Hình sau cho thấy vị trí các căn phức của trên đường tròn đơn vị.
Bây giờ ta xem xét các tính chất của căn phức bậc của 1.
Tính chất 1: Nếu chẵn thì , nghĩa là tập các căn phức bậc của chia thành 2 tập trái dấu nhau.
Chứng minh:
.
Tính chất 2: Nếu chẵn thì .
Chứng minh:
Tính chất 3: Nếu là căn phức bậc của 1 thì
Chứng minh:
hoặc
Với ta có .
Nhận xét: Với các tính chất 1 và 2 ở trên, nếu là lũy thừa của , và nếu ta chọn tập điểm để tính giá trị của đa thức tại căn phức bậc thì ta có thể cài đặt thuật toán đệ quy như mô tả ở phần trên. Thuật toán này được gọi là phép biến đổi Fourier nhanh (FFT hay dFFT – chữ d là discrete – rời rạc).
Vậy để tính giá trị đa thức bậc tại các căn phức bậc của 1 (giả sử là lũy thừa của 2) ta có thuật toán FFT như sau:
procedure
Input: là các hệ số của , trong đó là lũy thừa của 2 (nếu chưa phải là lũy thừa của 2, ta chỉ cần thêm các số vào cho đủ)
Output: giá trị của đa thức tại các căn phức bậc của :
- If , return
- Else Tạo 2 đa thức
- Call , để tính giá trị của tại
- For
Với thuật toán FFT trong tay, ta có thuật toán nhân đa thức sau:
procedure
Input: là các hệ số của , là các hệ số của . Ta cũng giả sử là lũy thừa của 2.
Output: là các hệ số của
- Call , để tính giá trị đa thức tại
- For :
- Lập đa thức với các hệ số
- Call
- For :
trong đó
Để thấy thuật toán trên cho ta hệ số đúng, ta có định lý sau
Định lý: Với mọi , ta có đẳng thức
công thức này còn gọi là phép biến đổi Fourier ngược (inverse FFT).
Chứng minh: Thật vậy, khai triển ta được:
Theo tính chất 3 ở trên, ta có
Vậy , điều phải chứng minh.
Nhận xét:
- Định lý cho thấy quan hệ của các hệ số và giá trị của đa thức tại căn phức của 1: qua phép biến đổi Fourier (xuôi và ngược).
- Phép biến đổi Fourier nhanh với độ phức tạp là công cụ tính toán quan trọng trong ngành xử lý tín hiệu số (Digital Signal Processing), hầu hết các phần mềm xử lý hình ảnh, âm thanh đều có cài đặt thuật toán FFT.
- Thuật toán FFT được đưa ra bởi Cooley và Tukey năm 1965, nhưng thật ra, thuật toán này đã được Gauss nghĩ ra từ năm 1805, tuy vào thời điểm đó, ông không quan tâm đến độ phức tạp thuật toán.
Bình luận về bài viết này