Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 41 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
41
Dung lượng
1,45 MB
Nội dung
HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG Môn học: Thuật toán nâng cao Chương 30: Đa thức FFT (Polynomials and the FFT) GVHD: TS Phạm Văn Cường Học viên (nhóm 4): Lộc Minh Tùng Bùi Quang Hạnh Nguyễn Anh Tuấn Nguyễn Văn Tùng Phạm Đình Cường Phạm Văn Đạt HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG Đa thức: Là biểu diễn hàm A(x) theo biến x dạng: n −1 A(x) = ∑ a j x j j= Hệ số: phức, 3.25 + 6.999i √-1 Phần thực phần ảo Mức độ ràng buộc: n Bâc: k ak hệ số khác cao HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG Cộng đa thức n −1 A(x) = ∑ a j x j j= n −1 B(x) = ∑ b j x j j= n −1 C(x) = A(x) + B(x) = ∑ c j x j , c j = a j + b j j= Θ(n) thời gian tính toán HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG Ví dụ cộng đa thức 6x3 + 7x2 – 10x + –2x3 + 4x – = 4x3 + 7x2 – 6x + HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG Nhân đa thức C(x) = A(x) ⋅ B(x) = 2n − j c x ∑ j j= j c j = ∑ a k b j− k k =0 Gọi là: tính chập (convolution) Note: Mức độ ràng buộc C(x) is 2n – Tính toán đơn giản Θ(n2) time HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG Ví dụ nhân đa thức HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG Cách nhân nhanh Sử dụng FFT, nhân đa thức Θ(n lg n) thời gian Ý tưởng: Biểu diễn đa thức theo cách mà cho phép nhân nhanh Đổi sang cách biểu diễn Nhân Θ(n) thời gian Chuyển đổi trở lại Các bước chạy Θ(n lg n) thời gian HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG Biểu diễn đa thức Biểu diễn hệ số: n −1 A(x) = ∑ a j x j j= Lợi thế: 1) Có thể đánh giá thời điểm x0 Θ(n) thời gian sử dụng luật Horner: A(x0) = a0 + x0(a1 + x0(a2 + … + x0(an-2 + x0(an-1)) … )) 2) Có thể thêm Θ(n) thời gian Biểu diễn Point-Value : {(x0, y0), (x1, y1), …, (xn-1, yn-1)}, Trong xk khác biệt yk = A(xk) Chuyển đổi từ hệ số để P-V sử dụng luật Horner Θ(n2) thời gian Nhưng muốn Θ(n lg n) thời gian HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG Cộng nhân P-V Cộng: C(x) = A(x) + B(x) A: {(x0, y0), (x1, y1), …, (xn-1, yn-1)} B: {(x0, y′0), (x1, y′1), …, (xn-1, y′n-1)} C: {(x0, y0 + y′0), (x1, y1 + y′1), …, (xn-1, yn-1 + y′n-1)} Có thể tính toán C Θ(n) thời gian Nhân: C(x) = A(x) B(x) Phải “Mở rộng” A B tới 2n cặp P-V: A: {(x0, y0), (x1, y1), …, (x2n-1, y2n-1)} B: {(x0, y′0), (x1, y′1), …, (x2n-1, y′2n-1)} C: {(x0, y0 y′0), (x1, y1 y′1), …, (x2n-1, y2n-1 y′2n-1)} Cũng Θ(n) thời gian HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG Chiến lược nhân đa thức a0, a1, …, an-1 b0, b1, …, bn-1 Nhân bình thường Θ(n2) thời gian Đánh giá Θ(n lg n) thời gian A(ω2n0), B(ω2n0) A(ω2n1), B(ω2n1) A(ω2n2n-1), B(ω2n2n-1) c0, c1, …, c2n-2 Hệ số Biểu diễn Nội suy Θ(n lg n) thời gian Nhân điểm Pointwise Θ(n) thời gian C(ω2n0) C(ω2n1) C(ω2n2n-1) P.V Biểu diễn Triển khai FFT hiệu • Do ta có thuật toán sau: Thuật toán tính Fourier Recursive-FFT(a) Recursive-FFT(a) 11 nn==a.length a.length //n //nlàlàlũy lũythừa thừacủa của22 22 ififnn==1 ==1 33 return returnaa 44 ωωn ==ee2πi/n 2πi/n n 55 ωω==11 66 aa[0][0]==(a(a0, ,aa2, ,…, an-2) …, an-2) 77 aa[1][1]==(a(a1, ,aa3, ,…, an-1) …, an-1) [0] 88 yy[0][0]==Recursive-FFT(a Recursive-FFT(a[0])) [1] 99 yy[1][1]==Recursive-FFT(a Recursive-FFT(a[1])) 10 10 for forkk==00to ton/2 n/2––11do [0] [1] 11 yyk ==yyk [0]++ωωyyk [1] 11 k k k [0] 12 yyk+(n/2) ==yyk [0] ωωyyk[1][1] 12 k+(n/2) k k 13 ωω==ω⋅ω 13 ω⋅ωnn 14 14 return returnyy//Giả //Giảđịnh địnhyylàlà11vector vectorcột cột Độ xác Dòng tính toán: y[0]k = A[0](ωn/2k) k = 0, …, n/2 – y[1]k = A[1](ωn/2k) k = 0, …, n/2 – Bởi bổ đề Cancellation Lemma : y[0]k = A[0](ωn2k) y[1]k = A[1](ωn2k) Với k = 0, 1, …, n/2 – nhân đc (dòng 11): yk = yk[0] + ωnk yk[1] = A[0](ωn2k) + ωnk A[1](ωn2k) = A(ωnk) Chúng ta nhận đươc (dòng 12): yk+(n/2) = yk[0] – ωnk yk[1] = yk[0] + ωnk+(n/2) yk[1] = A[0](ωn2k) + ωnk+(n/2) A[1](ωn2k) [0] 2k+n k+(n/2) [1] 2k+n Phép nội suy Chúng ta vừa xem sử dụng thuật toán FFT để đánh n −1 giá y k = ∑ a jω kjn k = 0, 1, , n − j= Θ(n lg n) lần Làm để suy (i.e., đến từ P-V trở lại từ hệ số)? Có thể biểu diễn: n −1 a j = ∑ y k ω-nkj n k =0 k = 0, 1, , n − Vì vậy, với thay đổi nhỏ, sử dụng thuật toán FFT để nội suy O(n lg n) thời gian Tăng tốc độ thuật toán Có thể tăng tốc độ mã FFT thực tế cách làm cho lặp lặp lại loại bỏ chung biểu thức vòng lặp → Kết mã: Bit-Reverse-Copy(a, Bit-Reverse-Copy(a,A) A) nn:= :=length[a]; length[a]; for forkk:= :=00to tonn––11do A[rev(k)] A[rev(k)]:= :=aakk od od Iterative-FFT(a) Iterative-FFT(a) Bit-Reverse-Copy(a, Bit-Reverse-Copy(a,A); A); nn:= :=length[a]; length[a]; for forss:= :=11to tolglgnndo s m m:= :=22;s; ωωm := ee2πi/m 2πi/m ;; := m ωω:= :=1; 1; for forj j:= :=00to tom/2 m/2––11do for forkk:= :=j jto tonn––11do tt:= :=ωA[k ωA[k++m/2]; m/2]; uu:= :=A[k]; A[k]; A[k] A[k]:= :=uu++t;t; A[k A[k++m/2] m/2]:= :=uu––tt od od ωω:= :=ω⋅ω ω⋅ωmm od od od; od; return returnAA Tăng tốc độ thuật toán 30-1 Nhân theo phương thức chia để trị • Thấy làm để nhân hai đa thức tuyến tính ax+b cx+d sử dụng ba phép nhân • Đưa hai thuật toán nhân-chia để tri hai đa thức bậc n O(nlg3) thời gian Các thuật toán phải chia đầu vào hệ số đa thức thành nửa cao nửa thấp, thuật toán thứ hai phân chia chúng theo dù số chẵn lẻ • Cho thấy làm để nhân hai số nguyên nbit O(nlg3) thời gian, lần hoạt động nhiều số giá trị 1- bit 30-2 Toeplitz ma trận • Một ma trận Toeplitz ma trận có kích thước nxn A=( aij) aij=ai-1,j-1 với i= 1,2 …n j = 2,3,… n • a Tổng hai ma trận Toeplitz ma trận Toeplitz? • b Mô tả cách biểu diễn cho ma trận Toeplitz để bạn thêm hai ma trận Toeplitz kích thước nxn O(n) thời gian • c Đưa giải thuật O(nlgn) thời gian cho trình nhân ma trận Toeplitz nxn vector độ dài n Sử dụng cho miêu tả từ phần (b) • d Đưa thuật toán hiệu để nhân hai ma trận Toeplitz nxn Phân tích thời gian hoạt động 30-3 Biến đổi Fourier đa chiều • Đầu vào mảng d – chiều A = (aj1, aj2, ajd) mà kích thước n1, n2, …, nd n1n2…nd = n Chúng ta xác định phép biến đổi Fourier rời rạc d – chiều biểu thức 30-3 Biến đổi Fourier đa chiều • • • Chúng ta tính toán DFT d-chiều cách tính DFTs 1- chiều chiều Có nghĩa là, trước tiên tính riêng n/n1 DFTs 1- chiều với chiều Sau đó, sử dụng kết DFTs với chiều đầu vào, tính toán riêng n/n2 DFTs 1-chiều với chiều Sử dụng kết đầu vào, tính toán riêng n/n3 DFTs 1- chiều với chiều 3, vậy, thông qua kích thước d kích thước không quan trọng, để tính toán DFT d- chiều cách tính toán DFTs chiều tính toán DFT - chiều cách tính toán biến đổi Fourier nhanh, tổng số thời gian để tính toán DFT d chiều Bật O(nlgn), độc lập với d 30-4 Đánh giá tất dẫn xuất đa thức điểm • Cho đa thức A(x) với ràng buộc n phát sinh t 30-4 Đánh giá tất dẫn xuất đa thức điểm a Đưa hệ số bn−0,b ,…, bn-1 1 A( x) = ∑ b j ( x − x0 ) j j =0 Cho biết cách tính A(t) (x0), với t=0,1,2,…,n-1, trongO(n) thời gian b Giải thích cách tìm b0,b1,…, bn-1 O(nlgn) , k x0 + ωn thời gian, đưa biểu thức A( ) với k=0,1,2,…,n-1 30-5 Đánh giá đa thức nhiều điểm • Đưa cách biểu diễn hệ số đa thức n điểm x0, x1, …,xn-1, mong muốn tính n giá trị A(x0), A(x1), …, A(xn-1) • Xác đinh đa thức 30-6 FFT sử dụng số học modula • Theo định nghĩa, biến đổi rời rạc Fourier đòi hỏi phải tính toán phức tạp với số, mà dẫn đến không xác lỗi làm tròn Đối với số vấn đề, câu trả lời biết đến có chứa số nguyên, cách sử dụng biến thể FFT dựa số học mô-đunchúng ta đảm bảo câu trả lời tính xác Thanks you [...]... returnAA Tăng tốc độ của thuật toán 30-1 Nhân theo phương thức chia để trị • Thấy làm thế nào để nhân hai đa thức tuyến tính ax+b và cx+d chỉ sử dụng ba phép nhân • Đưa ra hai thuật toán nhân-chia để tri hai đa thức bậc n trong O(nlg3) thời gian Các thuật toán đầu tiên phải chia đầu vào hệ số đa thức thành một nửa cao và nửa thấp, và các thuật toán thứ hai phân chia chúng theo dù chỉ số chẵn hoặc lẻ... cách thay đổi các thuật toán FFT để chuyển đổi vai trò của α và y , thay thế ωn bởi ωn-1 , và phân chia mỗi phần tử kết quả của n, chúng ta tính toán DFT ngược • Do đó, chúng ta có thể tính toán DFTn-1 trong thời gian Θ(n lg n) là tốt • Chúng ta thấy rằng , bằng cách sử dụng FFT và FFT ngược , chúng ta có thể chuyển đổi một đa thức bậc n-ràng buộc qua lại giữa các đại diện hệ số của nó và đại diện giá... kế một mạch FFT song song hiệu quả • Lặp đi lặp lại một thực hiện FFT • Chúng tôi có thể thay đổi vòng lặp để tính toán nó chỉ một lần, lưu trữ nó trong một biến t tạm thời Triển khai FFT hiệu quả ̀ ωn = ωnk • Hoạt động trong vòng lặp này, nhân tố quay vong bởi yk[1] , lưu trữ các giá trị vào t, và cộng và trừ t từ y k[0] • Bây giờ chúng ta thấy làm thế nào để thực hiện các thuật toán FFT lặp đi lặp... điểm trong thời gian Θ(n lg n) DFT và FFT • Định Lý 30.8 (Định ly phép nhân chập) • Đối với bất kỳ hai vectors a và b có độ dài n , n là lũy thừa của 2 • Nơi các vectors a và b được đệm bằng số 0 đến chiều dài 2n , và có nghĩa tích số theo từng thành phần của 2 vectors 2n phần tử Triển khai FFT hiệu quả Đầu tiên, chúng ta sẽ xem xét một phiên bản của thuật toán FFT chạy lặp đi lặp lại trong thời... 1 là đầu vào, tính toán riêng n/n2 DFTs 1-chiều cùng với chiều 2 Sử dụng kết quả này như đầu vào, tính toán riêng n/n3 DFTs 1- chiều cùng với chiều 3, và như vậy, thông qua kích thước d kích thước không quan trọng, để chúng ta có thể tính toán một DFT d- chiều bằng cách tính toán DFTs 1 chiều tính toán mỗi DFT 1 - chiều bằng cách tính toán biến đổi Fourier nhanh, tổng số thời gian để tính toán một... khai FFT hiệu quả • Trong sơ đồ dưới , chúng tôi đã sắp xếp các vector đầu vào cho các cuộc gọi đệ quy trong một lời gọi của Đệ quyFFT trong một cấu trúc cây • Trong lá của cây trong hình 30.4 (Chúng ta sẽ thấy sau làm thế nào để xác định điều này trật tự, được biết đến như một bit-đảo ngược hoán vị.) Triển khai FFT hiệu quả • Do đó ta có các thuật toán như sau: Thuật toán tính Fourier Recursive -FFT( a)... dụng các thuật toán FFT để đánh n −1 giá y k = ∑ a jω kjn k = 0, 1, , n − 1 j= 0 trong Θ(n lg n) lần Làm thế nào để chúng ta suy (i.e., đến từ P-V trở lại từ hệ số)? Có thể biểu diễn: 1 n −1 a j = ∑ y k ω-nkj n k =0 k = 0, 1, , n − 1 Vì vậy, với những thay đổi nhỏ, chúng ta có thể sử dụng các thuật toán FFT để nội suy trong O(n lg n) thời gian Tăng tốc độ của thuật toán Có thể tăng tốc độ mã FFT trong... về bởi Recursive -FFT thực sự là DFT của vector đầu vào a Đánh giá thuật toán Recursive -FFT( a) Recursive -FFT( a) 11 nn==a.length a.length //n //nlàlàlũy lũythừa thừacủa của22 22 ififnn==1 ==1 33 return returnaa 44 ωωn ==ee2πi/n 2πi/n n 55 ωω==11 66 aa[0][0]==(a(a0, ,aa2, ,…, an-2) 0 2 …, an-2) 77 aa[1][1]==(a(a1, ,aa3, ,…, an-1) 1 3 …, an-1) [0] 88 yy[0][0]==Recursive -FFT( a Recursive -FFT( a[0])) [1] 99... Fall 2009 FFT - 15 Phép biến đổi Fourier nhanh (FFT) FFT tính DFTn(a) với thời gian là Θ(n lg n) nhờ sử dụng chiến thuật chia để trị Định nghĩa: A[0](x) = a0 + a2x + a4x2 + … + an-2xn/2-1 A[1](x) = a1 + a3x + a5x2 + … + an-1xn/2-1 A[0](x): gồm các hệ số chỉ số chẵn của A, A[1](x): gồm các hệ số chỉ số lẻ của A Cả 2 đều là đa thức có bậc ràng buộc là n/2 Chú ý: A(x) = A[0](x2) + x⋅A[1](x2) Chiến thuật: ... x⋅A[1](x2) Chiến thuật: 1 Tính A[0](x) và A[1](x) tại (ωn0)2, (ωn1 )2, …, (ωnn-1 )2 n/2 căn phức bậc (n/2)th của 1 (theo bổ đề chia đôi) 2 Tổng hợp kết quả nhờ phương trình: A(x) = A[0](x2) + x⋅A[1](x2) Như vậy ta đã giải 1 bài toán với kích thuớc n thông qua giải 2 bài toán cùng dạng có kích thước n/2 Comp 750, Fall 2009 FFT - 16 Trường hợp cơ sở Với n = 1 n −1 Áp vào y k = A(ω kn ) = ∑ a jω kjn , 0 ... Tăng tốc độ thuật toán 30-1 Nhân theo phương thức chia để trị • Thấy làm để nhân hai đa thức tuyến tính ax+b cx+d sử dụng ba phép nhân • Đưa hai thuật toán nhân-chia để tri hai đa thức bậc n O(nlg3)... tri hai đa thức bậc n O(nlg3) thời gian Các thuật toán phải chia đầu vào hệ số đa thức thành nửa cao nửa thấp, thuật toán thứ hai phân chia chúng theo dù số chẵn lẻ • Cho thấy làm để nhân hai... thay đổi nhỏ, sử dụng thuật toán FFT để nội suy O(n lg n) thời gian Tăng tốc độ thuật toán Có thể tăng tốc độ mã FFT thực tế cách làm cho lặp lặp lại loại bỏ chung biểu thức vòng lặp → Kết mã: