Bài giảng Thuật toán nâng cao - Nguyễn Thanh Bình

Thu t toán nâng cao  
Nguyꢀn Thanh Bình  
Khoa Công nghꢁ Thông tin  
Trꢂꢃng Čꢄi hꢅc Bách khoa  
ꢆꢄi hꢅc ꢆà Nꢇng  
M c čích  
• Các khái niꢁm liên quan Č%n bài toán và  
gi(i quy%t bài toán  
• Phân tích và Čánh giá thu,t toán  
• Các k- thu,t thi%t k% thu,t toán  
• V,n d0ng gi(i quy%t các bài toán c0 th1  
2
1
N i dung  
• Gi4i thiꢁu  
7
• Ch6ng minh s8 Čúng Č:n  
• ꢆ= ph6c tꢄp (complexity)  
• ꢆꢁ quy (recursion)  
• Chia Č1 trD (divide and conquer)  
• Quy hoꢄch Č=ng (dynamic programming)  
• Thu,t toán tham lam (greedy algorithms)  
• Quay lui (backtracking)  
41  
70  
122  
152  
191  
290  
355  
• Thu,t toán xác xuHt (probabiliste algorithms) 399  
• L4p các bài toán NP ČJy ČK (NP-complete) 442  
• Thu,t toán xHp xM (approximation algorithms) 461  
3
ꢀánh giá  
• Bài t,p l4n 1  
¢ Tóm t:t bài báo khoa hꢅc  
• Bài t,p l4n 2  
¢ Tìm hi1u và trình bày m=t chK ČP vP thu,t  
toán  
• Thi k%t thúc môn hꢅc  
4
2
Tài li u tham kh o  
1.  
Introduction to algorithms, T.H. Cormen, C.E. Leiserson,  
R.R. Rivest, Mit Press 1990.  
2.  
Type de Données et Algorithmes, M-C Gaudel, M. Soria, C.  
Froidevaux, Ediscienne international, 1993.  
3.  
Cours Complexité, M. Daniel, ESIL, 2006.  
4.  
Data structures and algorithms, Alfred V. Aho, John E.  
Hopcroft, Addison-Wesley, 1983.  
5.  
6.  
7.  
Algorithm Analysis and Computational Comlexity, Ian  
Parberry, Lecture Notes, University of North Texas, 2001.  
The Art of Computer Programming, Volume 2, D. Knuth,  
Addison-Wesley, 1981.  
Các tài liꢁu khác trên Internet.  
5
Bài t p l n  
• Mbi hꢅc viên chꢅn trình bày mꢀt trong các chꢁ  
Čꢂ sau  
¢ K- thu,t nhánh và c,n (branch and bound)  
¢ K- thu,t bi%n Čci Fourier (Fourier transform)  
¢ Thu,t toán di truyPn (genetic algorithm)  
• Yêu cJu  
¢ Tìm hi1u và trình bày vP chK ČP  
¢ Minh hoꢄ và gi(i thích phꢂeng pháp bfi ít nhHt 2 ví d0  
c0 th1  
¢ ꢆánh giá và phân tích gi(i pháp các ví d0  
¢ Hꢅc viên t8 tìm ki%m các tài liꢁu liên quan Č%n chK ČP  
• K%t qu(  
¢ Báo cáo tg 10 Č%n 20 trang  
¢ Báo cáo ph(i trích dꢃn rꢄ ràng các tài liꢁu tham kh(o  
6
3
Gi i thi u (1)  
Nguyꢀn Thanh Bình  
Khoa Công nghꢁ Thông tin  
Trꢂꢃng Čꢄi hꢅc Bách khoa  
ꢆꢄi hꢅc ꢆà Nꢇng  
Gi i thi u  
• Khái niꢁm gi(i thu,t/thu,t toán (algorithm)  
¢ Thu,t toán là m=t dãy xác ČDnh các thao tác ce b(n áp  
d0ng trên dj liꢁu vào nhkm Čꢄt Čꢂlc gi(i pháp cho m=t  
vHn ČP  
¢ Hai vHn ČP  
• Tìm m=t phꢂeng pháp gi(i quy%t vHn ČP  
° Gi(i pháp cho ax2 + bx + c = 0 : rp ràng và xác ČDnh  
° Gi(i pháp cho ax5 + bx4 + cx3 + dx2 + ex + f = 0 : không có  
gi(i pháp tcng quát  
• Tìm m=t gi(i pháp hiꢅu quꢆ  
¢ Phân biꢁt gi(i thu,t và chꢂeng trình  
• Chꢂeng trình là cài Čqt thu,t toán bkng m=t ngôn ngj l,p  
trình  
8
4
Gi i thi u  
• Thu,t toán  
¢ ThK t0c tính toán nh,n t,p các dꢇ liꢅu vào  
(input) và tꢄo các dꢇ liꢅu ra (output)  
¢ Thu,t toán Čꢂlc gꢅi là Čúng Čꢈn (correct),  
n%u thuꢉt toán d ng cho k"t quꢆ Čúng v4i  
mꢅi dj liꢁu vào  
9
Gi i thi u  
• Thu,t toán hkng ngày trong cu=c srng  
¢ NHu cem  
• …  
¢ Gꢅi Čiꢁn thoꢄi  
• Thu,t toán trong toán hꢅc/tin hꢅc  
¢ Nhân hai ma tr,n  
¢ Tính tích phân  
¢ Gi(i hꢁ phꢂeng trình b,c nhHt  
¢ …  
10  
5
Gi i thi u  
• Các tính chHt cKa thu,t toán  
¢ Tính tcng quát  
¢ Tính hju hꢄn  
¢ Tính không nh,p nhkng  
¢ Tính hiꢁu qu(  
11  
Gi i thi u  
• Tính tcng quát (1)  
¢ Thu,t toán ph(i áp d0ng cho tHt c( các mtu dj  
liꢁu vào ch6 không chu là m=t mtu dj liꢁu vào  
c0 th1  
¢ Ví d0  
• S:p x%p tvng dJn m=t dãy các giá trD  
• Dj liꢁu vào :  
• K%t qu(  
2
1
1
2
4
3
3
4
5
5
:
12  
6
Gi i thi u  
• Tính tcng quát (2)  
¢ Phꢂeng pháp  
• So sánh hai phJn tw liên ti%p nhau tg trái qua ph(i,  
n%u không Čúng th6 t8 thì hoán Čci vD trí chúng  
Bꢂ4c 1: 2 ↔ 1  
4
4
3
3
5
5
5
5
Bꢂ4c 2:  
Bꢂ4c 3:  
Bꢂ4c 4:  
2
1
1
1
2
2
4 ↔ 3  
3
4
• Dãy Čã Čꢂlc s:p x%p  
• Thu,t toán có tcng quát không ?  
• Không  
° Ví d0 dj liꢁu vào: 2 1 5 4 3  
13  
Gi i thi u  
• Tính hju hꢄn  
¢ Thu,t toán ph(i dgng sau m=t sr bꢂ4c xác  
ČDnh  
¢ Ví d0  
nh,p n  
while (n ≠ 0)  
n = n œ 2  
endwhile  
¢ Thu,t toán có dgng không ?  
14  
7
Gi i thi u  
• Tính không nh,p nhkng  
¢ Các thao tác trong thu,t toán ph(i Čꢂlc Čqc t( chqt ch{  
• | mbi bꢂ4c th8c thi, bꢂ4c ti%p theo s{ Čꢂlc th8c thi ph(i  
Čꢂlc xác ČDnh rõ ràng  
¢ Ví d0  
Bꢂ4c 1: x = 0  
Bꢂ4c 2: tvng x lên 1 hoqc gi(m x xurng 1  
Bꢂ4c 3: if (x [-2,2]) then  
goto Bꢂ4c 2  
¢ Thu,t toán có nh,p nhkng ?  
15  
Gi i thi u  
• Tính hiꢁu qu(  
¢ Thu,t toán ph(i sw d0ng hiꢁu qu( ngu€n tài nguyên máy  
tính  
• Thꢃi gian  
• B= nh4  
¢ Ví d0  
gt1 (n)  
begin  
gt2 (n)  
begin  
p = 1  
if (n = 0) return (1)  
else  
return (n*gt(n-1))  
endif  
end  
for i from 1 to n do  
p = p * i;  
endfor  
end  
¢ Thu,t toán nào hiꢁu qu( hen ?  
16  
8
Gi i thi u  
• ꢆqc t( thu,t toán (1)  
¢ Có nhiPu cách Čqc t( thu,t toán  
• Không hình th6c  
° Ngôn ngj t8 nhiên  
• Nja hình th6c  
° Kêt hlp ngôn ngj t8 nhiên và các kí hiꢁu toán hꢅc  
° Se Č€ khri, ngôn ngj gi(, …  
• Hình th6c  
° Các kí hiꢁu toán hꢅc  
° Ngôn ngj Z, ngôn ngj B, …  
17  
Gi i thi u  
• ꢆqc t( thu,t toán (2)  
¢ Chꢅn phꢂeng pháp Čqc t( nja hình th6c  
• Ngôn ngj gi( t8a C/Pascal k%t hlp ngôn ngj t8 nhiên  
if (ČiPu kiꢁn) then  
…
else  
…
endif  
while () do  
…
endwhile  
for … from … to … do  
…
endfor  
18  
9
Gi i thi u  
• Ví d0 1  
¢ Có 15 h=p Činh có chiPu dài khác nhau. CJn  
Čqt chúng vào trong 15 ngvn kéo. Chúng ta  
cJn ph(i th8c hiꢁn th% nào Č1 có th1 lHy Čꢂlc  
loꢄi Činh chúng ta cJn m=t cách nhanh nhHt?  
19  
Gi i thi u  
• Ví d0 1  
¢ Gi(i pháp thô  
• Chúng ta x%p các h=p Činh vào các ngvn kéo theo th6 t8  
bHt k„. Sau Čó, mbi khi cJn lHy Činh chúng ta mf các  
ngvn kéo theo th6 t8 tg trái qua ph(i.  
• Trꢂꢃng hlp xHu nhHt: ph(i mf 15 ngvn kéo  
• Trꢂꢃng hlp trung bình: gi( sw xác xuHt lHy các loꢄi Činh  
ngang nhau, ph(i mf 8 ngvn kéo  
i =  
=
ƒ
• N%u nhjng loꢄi Činh trong các ngvn kéo curi cùng luôn  
Čꢂlc sw d0ng, cJn nhiPu lJn mf các ngvn kéo  
20  
10  
Gi i thi u  
• Ví d0 1  
¢ Gi(i pháp Las Vegas  
• Chúng ta chꢅn ngvn kéo Č1 mf m=t cách ngtu nhiên  
° N%u may m:n, chúng ta có loꢄi Činh cJn lHy  
° N%u không, chúng ta loꢄi bp ngvn kéo vga mf, th8c  
hiꢁn mf ngvn kéo khác m=t cách ngtu nhiên  
+
+
+
=
i =  
ƒ
21  
Gi i thi u  
• Ví d0 1  
¢ Gi(i pháp tiPn xw lð  
• Chúng ta s:p x%p các h=p Činh theo th6 t8 chiPu dài cKa  
chúng  
• X%p vào các ngvn kéo theo th6 t8 trên  
• N%u lꢄi mf các ngvn kéo tg trái sang ph(i thì s{ không  
thu Čꢂlc lli ích gì  
• Mf các ngvn kéo theo phꢂeng pháp tìm ki%m nhD phân  
• Trꢂꢃng hlp xHu nhHt: 4 lJn mf ngvn kéo  
• Trꢂꢃng hlp trung bình: 3.26  
+
+
+
=
• Gi(i pháp chu có ð nghMa khi chúng ta thꢂꢃng xuyên mf  
các ngvn kéo lHy Činh  
22  
11  
Gi i thi u  
• Ví d0 2  
¢ Thu,t toán nhân hai sr nguyên  
¢ Thu,t toán nhân B:c M-  
5 6 7  
1 2 3 4  
2 2 6 8  
1 7 0 1  
1 1 3 4  
5 6 7  
6 9 9 6 7 8  
23  
Gi i thi u  
• Ví d0 2  
¢ Thu,t toán nhân Anh  
5 6 7  
1 2 3 4  
5 6 7  
1 1 3 4  
1 7 0 1  
2 2 6 8  
6 9 9 6 7 8  
24  
12  
Gi i thi u  
• Ví d0 2  
¢ Thu,t toán nhân ˆ-r,p  
5
6
7
0
0
1
1
2
0
1
2
2
1
2
3
4
0
5
6
7
1
6
0
2
8
4
4
1
8
1
9
5
2
9
0
6
7
8
¢ So sánh Č= hiꢁu qu( các thu,t toán ?  
25  
Gi i thi u  
• Ví d0 2  
¢ ꢆ%m sr phép toán nhân và c=ng Čꢂlc th8c hiꢁn  
• Thu,t toán nhân B:c M- và thu,n toán nhân Anh ČPu sw  
d0ng 12 phép nhân và 15 phép c=ng  
• Thu,t toán ˆ-r,p sw d0ng 12 phép nhân và 20 phép c=ng  
• Sr phép toán ph0 thu=c vào sr chj sr cKa mbi sr nguyên  
° Sr phép nhân bkng m*n v4i m và n lJn lꢂlt là sr chj sr cKa  
mbi sr nguyên  
26  
13  
Gi i thi u  
• Ví d0 2  
¢ Thu,t toán nhân Nga  
567  
283  
141  
70  
35  
17  
8
1234  
2468  
4936  
#u Či$m: không cJn  
ghi nh4 các k%t qu(  
nhân trung gian, chu  
cJn th8c hiꢁn phép  
c=ng và chia cho 2  
9872  
19744  
39488  
78976  
157952  
315904  
631808  
699678  
4
2
1
27  
Gi i thi u  
• Ví d0 2  
¢ Thu,t toán nhân « chia Č1 trD »  
• Sr chj sr cKa hai sr nguyên ph(i bkng nhau và ph(i bkng  
lu- thga 2  
° N%u sr chj sr cKa hai sr nguyên khác nhau thì thêm vào các  
sr 0 f bên trái  
• Ð tꢂfng: chúng ta thay phép nhân cKa hai sr nguyên có n  
chj sr bfi 4 phép nhân cKa hai sr nguyên có n/2 chj sr.  
Ti%p t0c, thay phép nhân cKa hai sr nguyên có n/2 chj sr  
bfi 4 phép nhân cKa hai sr nguyên có n/4 chj sr, …  
• CJn nhân hai sr nguyên: a và b. Gꢅi aL và aR là hai nja  
trái và ph(i cKa sr a, tꢂeng t8 bL và bR là hai nja trái và  
ph(i cKa b  
28  
14  
Gi i thi u  
• Ví d0 2  
¢ Thu,t toán nhân « chia Č1 trD »  
aL  
bL  
aR  
bR  
*
aLbR  
aRbL  
aRbR  
+ aLbL  
aLbL + (aLbR +aRbL) + aRbR  
a*b  
= (aL*10n/2+ aR)*(bL*10n/2+ bR)  
= aL*bL*10n + aL*bR*10n/2 + aR*bL*10n/2 + aR*bR  
= aL*bL*10n + (aL*bR + aR*bL)10n/2 + aR*bR  
ꢆ1 nhân a và b bfi các nja cKa a và b, cJn sw d0ng 4 phép nhân  
29  
Gi i thi u  
• Ví d0 2  
¢ Thu,t toán nhân « chia Č1 trD »  
• Gi(m sr phép nhân a và b bfi các nja cKa a và b tg 4  
xurng còn 3  
ꢆqt:  
p = aL*bL  
q = aR*bR  
r = (aL + aR)*(bL + aR)  
Khi Čó:  
a*b  
= aL*bL*10n + (aL*bR + aR*bL)*10n/2 + aR*bR  
= p*10n + (r œ p - q)*10n/2 + q  
• Sr phép nhân sw d0ng bfi thu,t toán này Čꢂlc Čánh giá  
là n*m0.59 v4i n ≥ m  
• Khi nhân hai sr nguyên khá l4n, thu,t toán này Čꢂlc  
Čánh giá nhanh hen các thu,t toán trꢂ4c  
30  
15  
Gi i thi u  
• Ví d0 2  
¢ Thu,t toán nhân « chia Č1 trD »  
0567 * 1234  
nhân  
sr bꢂ4c dDch  
k%t qu(  
60  
170  
804  
2278  
05 12  
05 34  
67 12  
67 34  
4
2
2
0
05 * 34  
nhân  
0 3  
0 4  
5 3  
sr bꢂ4c dDch  
k%t qu(  
2
1
1
0
0
0
699678  
15  
20  
5 4  
170  
31  
Gi i thi u  
• Ví d0 3: tính xn  
¢ Vào: m=t sr nguyên x và m=t sr nguyên  
không âm n  
¢ Ra: y = xn  
¢ Thu,t toán Čen gi(n  
if n = 0 then  
y = 1  
else  
y = x  
endif  
for i from 1 to n do  
y = y * x  
endfor  
32  
16  
Gi i thi u  
• Ví d0 3: tính xn  
¢ Thu,t toán nhD phân  
• Gi(m sr phép toán  
• Ð tꢂfng: sw d0ng các k%t qu( trung gian  
• Nguyên t:c: n%u n/2 = 0 thì xn = xn/2 * xn/2 n%u không thì  
xn = xn-1 * x  
• Ch•ng hꢄn  
° x35 = x34 * x  
° x34 = x17 * x17  
° x17 = x16 * x  
° x16 = x8 * x8  
° x8 = x4 * x4  
° x4 = x2 * x2  
° x2 = x * x  
33  
Gi i thi u  
• Ví d0 3: tính xn  
¢ Thu,t toán nhD phân  
1. Bi1u diꢀn n bfi dãy nhD phân  
2. Thay mbi bít nhD phân  
« 1 » bfi các kí hiꢁu SX  
« 0 » bfi các kí hiꢁu X  
3. Xoá cqp kí hiꢁu SX bên trái nhHt  
4. K%t qu(: cách tính xn trong Čó  
S nghMa là bình phꢂeng  
X nghMa là nhân v4i x  
B:t ČJu tg x  
34  
17  
Gi i thi u  
• Ví d0 3: tính xn  
¢ Thu,t toán nhD phân  
Bi1u diꢀn n bfi dãy nhD phân: ek-1ek-2…e0  
if ek-1 = 0 then  
y = 1 // khi n = 0  
else  
y = x  
endif  
for i from k-2 to 0 do  
y = y * y  
if ei = 1 then  
y = y * x  
endif  
endfor  
35  
Gi i thi u  
• Ví d0 3: tính xn  
¢ Thu,t toán nhD phân  
• Ví d0: n = 35 = 100011(2)  
ei  
y
x
sr phép nhân  
1
0
0
0
0
1
1
x2  
x4  
1
2
3
5
7
x8  
x17  
x35  
36  
18  
Gi i thi u  
• Ví d0 3: tính xn  
¢ Thu,t toán nhD phân: gi(i thích  
p
i
n =  
Ai  
• Bi1u diꢀn nhD phân cKa n:  
ƒi=  
• Gi( sw chúng ta Čang trong quá trình tính xn. Gꢅi j là vD trí  
bít bên curi cùng (trái nhHt) bi1u diꢀn n, yj là k%t qu( curi  
cùng có Čꢂlc. Ban ČJu: j = p, yp = x = xAp  
• Có hai kh( nvng cKa Aj-1  
° Aj-1 = 1. Thay th% Aj-1 bfi SX. V,y yj-1 = yj2 * x  
° Aj-1 = 0. Thay th% Aj-1 bfi S. V,y yj-1 = yj2  
C( hai trꢂꢃng hlp: yj-1 = yj2 * xAj-1  
• V,y: yp-1 = yp2 * xAp-1 = (xAp)2 * xAp-1 = x2Ap + Ap-1  
• Bkng truy h€i:  
i
p
i=  
Ai  
y = xƒ  
= xn  
37  
Gi i thi u  
• Ví d0 3: tính xn  
¢
Thu,t toán nhD phân: có gi(i pháp trt hen ?  
•
Ch•ng hꢄn tính x15  
1. n = 15 = 1111  
2. SX  
3.  
SX  
SX  
SX  
SX  
SX  
SX  
4. B:t ČJu bfi x, chúng ta có: x2, x3, x6, x7, x14, x15  
V,y, chúng ta sw d0ng 6 phép nhân  
Tuy nhiên, chúng ta có th1 tính x15 bfi:  
x2, x3, x6, x12, x15 = x12 * x3  
NghMa là chu cJn sw d0ng 5 phép nhân  
38  
19  
Gi i thi u  
• Ví d0 3: tính xn  
¢ Phꢂeng pháp ꢂ4c sr  
• xn = x n%u n = 1  
• xn = xn-1 * x n%u n là sr nguyên tr  
• xn = (xr)s n%u n = r * s v4i r là ꢂ4c sr nguyên tr nhp nhHt  
cKa n và s > 1  
¢ Ví d0: n = 15  
• 15 = 3 * 5, khi Čó x15 = (x3)5. Êp d0ng thu,t toán Č1 tính  
x3 và c5 v4i c = x3.  
• x3 = x2 * x, áp d0ng thu,t toán tính x2  
• x2 = x * x  
• c5 = c4 * c, áp d0ng thu,t toán tính c4  
• c4 = (c2)2  
• 2 phép nhân tính c4, 3 phép nhân tính c5, 2 phép nhân tính  
x3. V,y 5 phép nhân tính x15  
39  
Gi i thi u  
• Phân tích và Čánh giá các thu,t toán  
¢ D8a vào các tính chHt cKa thu,t toán  
¢ Ch6ng minh s8 Čúng Č:n  
¢ ꢆánh giá Č= ph6c tꢄp  
40  
20  
Tải về để xem bản đầy đủ
pdf 239 trang Thùy Anh 16580 Free
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Thuật toán nâng cao - Nguyễn Thanh Bình", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfbai_giang_thuat_toan_nang_cao_nguyen_thanh_binh.pdf
  • pdfTrangBia-TTNC.pdf