Tải bản đầy đủ (.ppt) (41 trang)

Thuyết trình môn thuật toán nâng cao đa thức và FFT (polynomials and the FFT)

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.61 MB, 41 trang )

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 và FFT (Polynomials and the FFT)
GVHD: TS. Phạm Văn Cường
Học viên (nhóm 4):
1. Lộc Minh Tùng
2. Bùi Quang Hạnh
3. Nguyễn Anh Tuấn
4. Nguyễn Văn Tùng
5. Phạm Đình Cường
6. 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 một hàm A(x) theo biến x dưới dạng:
n −1

A(x) = ∑ a j x j
j= 0

Hệ số: căn phức,
3.25 + 6.999i
√-1
Phần thực

phần ảo

Mức độ ràng buộc: là n.
Bâc: là k nếu ak là hệ số khác 0 cao nhất.




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= 0

n −1

B(x) = ∑ b j x j
j= 0

n −1

C(x) = A(x) + B(x) = ∑ c j x j , c j = a j + b j
j= 0

Θ(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 + 9
–2x3 + 4x – 5
=
4x3 + 7x2 – 6x + 4



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 − 2

j
c
x
∑ j
j= 0

j

trong đó 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ủa C(x) is 2n – 1.
Tính toán đơn giản mất Θ(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 hơn
Sử dụng FFT, có thể nhân 2 đa thức trong Θ(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 hơn.
1. Đổi sang cách biểu diễn mới.
2. Nhân trong Θ(n) thời gian.
3. Chuyển đổi trở lại.
Các bước đó chạy trong Θ(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 mới của đa thức
Biểu diễn hệ số:

n −1

A(x) = ∑ a j x j
j= 0

Lợi thế:

1) Có thể đánh giá tại bất kỳ thời điểm x0 trong Θ(n) thời gian sử dụng
luật của Horner:
A(x0) = a0 + x0(a1 + x0(a2 + … + x0(an-2 + x0(an-1)) … ))
2) Có thể thêm trong Θ(n) thời gian.
Biểu diễn Point-Value : {(x0, y0), (x1, y1), …, (xn-1, yn-1)},
Trong đó xk là khác biệt và yk = A(xk).

Chuyển đổi từ hệ số để P-V sử dụng luật của Horner mất Θ(n2) thời gian.
Nhưng chúng ta muốn mất Θ(n lg n) thời gian.


HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG

Cộng và nhân trong 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 trong Θ(n) thời gian.
Nhân: C(x) = A(x) B(x)
Phải “Mở rộng” A và 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 mất Θ(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.


HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG

DFT và FFT
Chúng ta chuyển đổi từ hệ số sang PV bằng cách đánh giá tại căn phức n

của 1
Biểu diễn như sau: ωn0, ωn1, …, ωnn-1.
ωnk = e2πik/n.
Chúng ta có (ωnk )n = 1 cho mỗi k.
Chứng minh:
(ωnk )n = e2πik
= cos(2πk) + i sin(2πk), và eiu = cos(u) + i sin(u).
=1
Nguyên tắc căn bậc n của 1: ωn = e2πi/n.


HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG

Ví dụ
ω8 3

ω 84

ω 82
i

ω81

ω 80 = ω 8 8

–1

ω8 5

1

ω87

–i
ω86

Giá trị của ω80, ω81, …, ω87 trong mảng phức, khi và chỉ khi
ω8 = e2πi/8 là nguyên tắc căn phức 8 của 1.


HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG

Bổ đề giản ước
dk
k
Bổ
Bổđề
đề30.3:
30.3:Với
Vớimọi
mọinn≥≥0,0,kk≥≥0,0,và
vàdd>>0:0:ωωdndndk ==ωωnn.k.

Chứng minh:
ωdndk = (e2πi/dn)dk
= (e2πi/n) k
= ωnk

n/2
Hệ
Hệquả

quả30.4:
30.4:Với
Vớimọi
mọinn>>0:0:ωωnnn/2 == ωω22 == –1.
–1.


HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG

Bổ đề chia
Bổ
Bổđề
đề30.5:
30.5:Nếu
Nếunn>>0,0,sau
sauđó
đóbình
bìnhphương
phươngcủa
củanncăn
cănphức
phứcbậc
bậcnncủa
của11làlàn/2
n/2
căn
cănphức
phức(n/2)
(n/2)của
của1.

1.
Chứng minh:
(ωnk)2 = ωn/2k
Lưu ý:

(ωnk+n/2)2 = ωn2k+n
= ωn2k ωnn
= ωn2k
= (ωnk)2

Do đó, ωnk và ωnk+n/2 có bình phương như nhau.


Phép biến đổi Fourier rời rạc (DFT)
n −1

Ta muốn tính giá trị của A(x) = ∑ a j x j tại ωn0, ωn1, …, ωnn-1.
j= 0

với điều kiện n là số lũy thừa của 2.
n −1

k
kj
Định nghĩa: y k = A(ω n ) = ∑ a jω n
j= 0

Vector y = (y0, y1, …, yn-1) gọi là biến đổi Fourier rời rạc
(DFT) của vector hệ số a = (a0, a1, …, an-1).
Biểu thị: y = DFTn(a).

Mục tiêu: Tính giá trị của y 1 cách hiẹu quả.
Comp 750, 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:
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 ≤ k < n,
j= 0
ta có:
y0 = a0ω10
= a0 ⋅ 1
= a0
Vậy: y = (y0) = (a0) = a.

Comp 750, Fall 2009

FFT - 17


Tính đúng đắ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
yy[1][1]==Recursive-FFT(a
Recursive-FFT(a[1]))
10
10 for
forkk==00to
ton/2
n/2––11do
do

[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

Dòng 8 – 9 tính:
y[0]k = A[0](ωn/2k) k = 0, …, n/2 – 1
y[1]k = A[1](ωn/2k) k = 0, …, n/2 – 1

Theo bổ đề giản ước:
y[0]k = A[0](ωn2k)
y[1]k = A[1](ωn2k)

Comp 750, Fall 2009

FFT - 18


Tính đúng đắn
Recursive-FFT(a)
Recursive-FFT(a)
11
nn==a.length
a.length
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
yy[1][1]==Recursive-FFT(a
Recursive-FFT(a[1]))
10
10 for
forkk==00to
ton/2
n/2––11do
do
[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

Với k = 0, 1, …, n/2 – 1
+ Tại dòng 11 ta có:
yk = yk[0] + ωnk yk[1]
= A[0](ωn2k) + ωnk A[1](ωn2k)
= A(ωnk)

+ Tại dòng 12 ta cũng có:
yk+(n/2) = yk[0] – ωnk yk[1]
= yk[0] + ωnk+(n/2) yk[1]
= A[0](ωn2k) + ωnk+(n/2) A[1](ωn2k)
= A[0](ωn2k+n) + ωnk+(n/2) A[1](ωn2k+n)
= A(ωnk+(n/2))
Vậy vector y trả 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
yy[1][1]==Recursive-FFT(a
Recursive-FFT(a[1]))
10
10 for
forkk==00to
ton/2
n/2––11do
do
[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

Ngoài các lời gọi đệ quy, mỗi
yêu cầu cần thời gian Θ(n) với
n: độ dài của vector đầu vào.
Do đó thời gian chạy là:
T(n) = 2T(n/2) + Θ(n)
= Θ(n lg n)


DFT và FFT
 Định lý 30.7
• Cho j,k = 0,1 ,…., n-1 , Các (j,k) đầu vào của V n-1 là ωn-kj /n.
• Chúng ta thấy rằng Vn-1Vn =ln , là dạng ma trân n x n
• Xem xét các (j ,j,) đầu vào của Vn-1Vn :

• Tổng này bằng 1 nếu j = j,
• Lưu ý rằng chúng tôi dựa trên –(n-1) ≤ j,- j ≤ n-1 , để j,- j
không chia hết cho n



DFT và FFT
• Với ma trận nghịch đảo Vn-1, chúng ta đã có DFTn-1 (y) được
cho bởi :

• Chúng ta thấy rằng bằng 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á trị một đ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 gian Θ(n lg n)

 Sau đó, chúng ta sẽ sử dụng những hiểu biết đó để thực
hiện lặp đi lặp lại để thiết 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 lại chứ không phải là đệ quy trong cấu
trúc


×