DANH MỤC TÀI LIỆU
Giải thuật trong xử lý các bài toán
Gi i thu t trong x lý các bài toánả ậ
Đ hi u đ c t i sao ki n th c v gi i thu t và vi c hi u bi t v gi i ượ ạ ế ế ề
thu t l i quan tr ng chúng ta c n đ nh nghĩa chính xác xem gi i thu t là ậ ạ
gì? M t đ nh nghĩa v gi i thu t đ c vi t trong cu n ” Introduction to ộ ị ề ả ậ ư ế
Algorithms ” khá ph bi n nh sau: M t gi i thu t là th t c hay trình t ế ư ủ ụ
th c hi n các công vi c c a máy tính đ c đ nh nghĩa rõ ràng, trong đó nó ệ ủ ượ
nh n vào giá tr ho c m t t p giá tr (g i là input) và sinh ra giá tr ho c ị ặ ị ặ
m t t p giá tr (g i là output). Nói cách khác gi i thu t nh là t m b n đ ,ộ ậ ư
ch d n đ hoàn thành công vi c.Ví d m t đo n code tính toán các giá tr ỉ ẫ
c a dãy s fibonaci là m t cài đ t cho m t gi i thu t c th , m c dù gi i ậ ụ
thu t đó đ n gi n ch là c ng 2 s li n nhau . M t s gi i thu t nh ví d ơ ố ề ư
trên tính toán s ti p theo c a dãy fibonaci, có th d dàng nh n bi t ế ể ễ ế
th m chí đ c cài đ t m t cách b m sinh trong h th ng t duy logic và ượ ệ ố ư
kh năng gi i quy t v n đ c a chúng ta.Tuy nhiên v i h u h t chúng ta ế ấ ề ầ ế
nh ng gi i thu t ph c t p chính là nh ng “best studied” đ t đó chúng ta ể ừ
có th s d ng m t ph n c a chúng đ xây d ng nh ng gi i thu t t t cho ể ử
nh ng v n đ khác trong t ng lai.Trên th c t con ng i s d ng nh ng ươ ế ườ ử ụ
gi i thu t r t ph c t p đ làm nh ng vi c đ n gi n nh check email, nghe ậ ấ ơ ư
nh c … Bài vi t này gi i thi u m t s ý t ng c b n nh t v phân tích ế ưở ơ ả
gi i thu t và áp d ng chúng vào nh ng ví d minh h a đ làm rõ h n t m ơ ầ
quan tr ng c a gi i thu t. ủ ả
Runtime Analysis
 !
"#$%!&#'()*+,-"#./
$012(3(456 &7($/8
95,-:"9".;&+,<&
"#".$%$,=></6?7@8A$
/B&C-+D3E9FGH".IHFGJJ0%5,
;,-$,=/F0$,=BKLMFGN,'"
".%<6?LOB&%!/8F6 ,-$%!
P/8BQ3/R/8,<&%$+7@8B>/(</BK
5,S<2T".B>/(<//23CS%5,
2CU-6V<&,5WXBYB3D3Z+W33YB3D3Z
1"#36XBYB3D3#5,"#./
&#A/2633YB3D3#5,A0
&$A/6 !"#9=$XBYB3D3@[@S
33YB3D3-"#".@\"D-7/]A<9$$
6^%'5,$"#.//+@"#"#@\B&
_'=$27($33YB3D3$6`"N,B&a
%33YB3D3
BigO Runtime
O(Log(N)) 10-7 seconds
O(N) 10^-6 seconds
O(N*Log(N)) 10^-5 seconds
O(N2) 10^-4 seconds
BigO Runtime
O(N6) 3 minutes
O(2N) 1014 years.
O(N!) 10142 years.
Sorting
Các gi i thu t s p x p là nh ng ví d đi n hình v thu t toán và th ng ậ ắ ế ườ
đ c s d ng. Cách đ n gi n nh t đ s p x p các ph n t trong m t ượ ơ ể ắ ế
nhóm là l y ph n t nh nh t kh i nhóm và đ a lên đ u tiên, tuy nhiên đ ầ ử ư
ph c t p c a gi i thu t này là O(N^2) có nghĩa là th i gian ch y c a gi i ạ ủ ạ ủ
thu t s t l thu n v i bình ph ng c a đ l n input. N u nh th c hi n ẽ ỷ ệ ươ ộ ớ ế ư
s p x p 1t ph n t thì c n th c hi n 10^18 phép tính. M t pc thông ế ầ ử
th ng có th ch y kho ng 10^9 phép tính m i giây và n u th c hi n s p ườ ế ệ ắ
x p theo cách trên thì ph i m t đ n hàng năm m i th c hi n xong. Th t ế ấ ế
may là có nh ng gi i thu t khác t t h n (quicksort, heapsort, mergesort..) ố ơ
nh ng gi i thu t này đã đ c phát hi n ra t nhi u năm tr c, ph n l n ượ ướ ầ ớ
gi i thu t trong s này có đ ph c t p O(N * Log(N)). Đi u này s gi m ứ ạ
thi u m t l ng l n các phép tính c n th c hi n và giúp th i gian x lý bài ộ ượ
toán nhanh h n nhi u dù ch y trên máy tính cùi b p h n. Thay vì th c hi nơ ắ ơ
10^18 phép tính, gi i thu t này ch th c hi n 10^10 phép tính, có nghĩa là ỉ ự
nhanh h n 100 tri u l n.ơ ệ ầ
Shortest Path
Bài toán tìm đ ng đi ng n nh t đã đ c nghiên c u trong nhi u năm và ườ ắ ấ ượ
có nhi u ng d ng. Tuy nhiên hãy c nghĩ đ n gi n là b n mu n tìm ề ứ ơ
đ ng đi t đi m A đ n đi m B thông qua vài con đ ng và các ngã t . Cóườ ừ ể ế ườ ư
khá nhi u gi i thu t x lý bài toán này v i nh ng u đi m cũng nh đánh ề ả ớ ữ ư ể ư
đ i khác nhau đ có đ c u đi m đó. Tr c khi tìm hi u sâu v cách gi i ượ ư ướ
quy t thì chúng ta hãy th tính xem m t gi i thu t thông th ng s m t ế ườ ẽ ấ
bao lâu n u nó tính toán t t c các kh năng đ ng đi. N u gi i thu t cân ế ấ ả ườ ế
tính toán h t các kh năng đi t A đ n B (không tính đi vòng tròn) thì s ế ừ ế
m t nhi u th i gian h n c đ i ng i, ề ờ ơ ờ ườ k c A và B ch trong m t ỉ ở
thành ph nh . Đ ph c t p c a gi i thu t thông th ng cho bài toán này ứ ạ ườ
là hàm mũ c a input O(CN) v i C là m t h ng s . Và k c trong tr ng ể ả ườ
h p C nh thì CN cũng tr nên vô cùng l n khi s đi m N tăng lên. M t ố ể
trong nh ng gi i thu t nhanh nh t x lý bài toán này có đ ph c t p ứ ạ
O(EVLog(V)), v i E là s đ ng đi gi a các đi m và V là các đi m giao ố ườ
nhau. V i đ ph c t p này thì gi i thu t s x lý bài toán trong 2s đ i v i ẽ ử
10000 đi m giao nhau và 20000 đ ng đi. Gi i thu t Djikstra’s khá ph c ườ ả ậ
t p và yêu c u cài đ t c u trúc d li u nh là hàng ch u tiên.Trong m t ư ờ ư
s tr ng h p gi i thu t này v n còn r t ch m (ví d trong tr ng h p ườ ợ ườ ợ
tính toán đ ng đi ng n nh t gi a New York đ n San Francisco – v i hàng ườ ấ ữ ế
tri u đi m giao nhau), vì th các programer tìm nh ng cách khác nhau đ ệ ể ế
c i ti n g i là heuristics (m o). Heuristic là cách tính x p x giá tr nào đó ả ế
liên quan đ n bài toán và th ng đ c s d ng đ tính toán trong gi i ế ườ ượ ử ụ
thu t.Ví d trong bài toán đ ng đi ng n nh t thì giá tr quãng đ ng t ườ ườ ừ
đi m hi n t i đ n đích vi c c tính đ c giá tr này s c i thi nt gi i ế ệ ướ ượ ẽ ả
thu t m t cách đáng k (nh gi i thu t A* khi áp d ng m o này s ch y ư ả
nhanh đáng k so v i Djikstra’s). Áp d ng heuristics trong h u h t tr ng ế ườ
h p không c i thi n đ c worst-case runtime nh ng c i thi n đáng k ả ệ ượ ư ả ệ
average-case runtime.
Approximate algorithms
Trong m t vài tr ng h p k c khi đã áp d ng nh ng gi i thu t t t nh t, ườ ể ả
kèm theo s d ng nh ng heuristics trên nh ng máy tính nhanh nh t nh ng ử ụ ư
runtime v n quá ch m. Trong nh ng tr ng h p này đ x lý đ c v n đ ườ ể ử ượ
bu c ph i đánh đ i đ chính xác c a k t qu m t m c đ nào đó.Ví d ế ả ở
nh tìm đ ng ng n nh t thì gi i thu t ch c n tìm ra đ ng đi thu c top ư ườ ỉ ầ ườ
10% ng n nh t.ắ ấ
Trên th c t , có nhi u v n đ quan tr ng mà k c nh ng gi i thu t t t ế ể ả
nh t th i đi m hi n t i cũng không th đ a ra đ c câu tr l i t i u ấ ở ư ượ ả ờ ố ư
m t cách đ nhanh. Nh ng nhóm v n đ này đ c g i là NP-problems, ví ượ ọ
d nh non-deterministic polynomial. N u m t bài toán đ c g i là NP- ư ế ượ ọ
complete ho c NP-hard, có nghĩa là ch a ai tìm ra đ c cách t i u đ gi i ư ư ố ư
quy t nó. N u ai đó tìm ra gi i thu t hi u qu đ gi i quy t 1 NP-ế ế ả ể ế
complete problem, thì gi i thu t đó có th đ c áp d ng cho t t c NP- ể ượ
complete problems.
M t ví d đi n hình v NP-hard problem là (famous traveling salesman ụ ể
problem)[https://simple.wikipedia.org/wiki/Travelling_salesman_problem]:
m t ng i bán hàng c n đi qua n thành ph và anh ta bi t ph i mát bao lâu ộ ườ ế ả
đ đi t thành ph này đ n thành ph khác, câu h i là m t bao lâu đ anh ể ừ ế
ta đi h t t t c thành ph . Khi ngay c cách gi i thu t nhanh nh t cũng t nế ấ
quá nhi u th i gian, các programer tìm ki m nh ng gi i thu t đ a ra k t ế ậ ư ế
qu t t nh ng không ph i t i u.ả ố ư ố ư
Random Algorithms
M t cách ti p c n khác đ gi i quy t các v n đ là b ng cách nào đó s ế ể ả ế
d ng ng u nhiên trong gi i thu t.Vi c này không c i thi n đ c th i gian ệ ượ
ch y c a gi i thu t trong tr ng h p t nh t c a input (worst case) nh ng ườ ấ ủ ư
th ng c i thi n trong average-case. Quicksort là m t ví d v s d ng ườ ề ử
ng u nhiên đ c i thi n thu t toán. Trong tr ng h p t nh t , runtime c a ể ả ườ
quicksort là O(N^2), v i N là s l ng ph n t c n sort. N u s d ng ố ượ ế
ng u nhiên trong gi i thu t tr ng h p t nh t v n có th x y ra nh ng ườ ể ả ư
v i xác su t r t nh , tính trung bình thì quicksort có runtime O(N ấ ấ Log(N)).
Có m t s gi i thu t khác đ m b o đ c th i gian ch y O(Nộ ố ượ Log(N)), ngay
c trong tr ng h p t nh t nh ng nó s ch m average case. M c dù ườ ư ở ở
gi i thu t có runtime t l v i N ỷ ệ Log(N), tuy nhiên quicksort cũng có nh ng
y u t c đ nh – c n t i thi u Cế ố ố NLog(N) phép tính trong khi nh ng gi i ữ ả
thu t khác c n nhi u h n 2 ơ CNLog(N) phép tính.
M t s gi ii thu t khác s d ng ng u nhiên đ tìm ra ph n t chính gi a ử ụ
v i runtime O(N). Đi u này th c s có ý nghĩa trong vi c áp d ng đ s p ể ắ
x p tìm ph n t chính gi a có runtime O(N*Log(N)). Thu t toán t t đ nh ế ầ ử ấ ị
(không s d ng ng u nhiên) tìm ra ph n t gi a v i runtime O(N), trong ử ở
khi gi i thu t ng u nhiên r t đ n gian và l i còn nhanh h n trong h u h t ấ ơ ơ ế
các tr ng h p.ườ ợ
Ý t ng chính c a gi i thu t tìm ph n t chính gi a trong group là l y ưở ầ ử
m t ph n t b t kỳ và đ m xem có bao nhiêu ph n t nh h n nó. G a s ầ ử ế ầ ừ ơ
có N ph n t và có K ph n t nh h n ph n t ng u nhiên đ c ch n. ầ ử ầ ử ơ ầ ử ượ
N u K < N/2 thì ph n t chính gi a đ ng th (N/2-K) trong s nh ng ế ầ ử
ph n t l n h n ph n t ng u nhiên đã ch n, lo i b K ph n t <= ph n ầ ử ơ ầ ử ạ ỏ ầ ử
t ng u nhiên đã ch n và ti p t c bài toán tìm ki m ph n t th (N/2-K) ế ự ế ầ ử ứ
trong các ph n t còn l i. Gi i thu t đ c th c hi n l p l i, ch n 1 ph n ầ ử ậ ư ặ ạ
t ng u nhiên và th c hi n các b c nh trên.ử ẫ ướ ư
Compression
M t d ng khác c a gi i thu t là các bài toán nén d li u. Nh ng bài toán ữ ệ
này không có output c th (nh bài toán s p x p), nh ng nó s t i u hóa ư ế ư ẽ ố ư
theo nh ng tiêu chu n. Trong bài toán nén d li u các thu t toán (ví d : ữ ệ
LZW) tìm cách gi m thi u s l ng byte l u tr d li u m t cách t i đa ố ượ ư
và sau đó tr l i d li u g c. Trong m t vài tr ng h p các gi i thu t này ả ạ ườ
cũng s d ng k thu t nh các gi i thu t cho bài toán thông th ng là đ a ử ụ ư ườ ư
ra k t qu đ t t thay vì t i u. Gi i thu t nén JPG và MP3 compression là ế ủ ố ố ư
m t ví d , sau khi nén và gi i nén thì k t qu cu i cùng có ch t l ng th p ế ấ ượ
h n file ban đ u nh ng dung l ng l i nh h n.ơ ư ượ ỏ ơ
The Importance of Knowing Algorithms
V i các nhà khoa h c máy tính vi c hi u và áp d ng các gi i thu t m t ậ ộ
cách chính xác là r t c n thi t. N u nh b n đang làm vi c đ t o ra ế ế ư ể ạ
nh ng ph n quan tr ng c a ph n m m b n c n ph i c l ng đ c ả ướ ượ ượ
m c đ nhanh c a gi i thu t. Vi c c l ng th i gian ch y s không th ệ ướ ượ
chính xác n u nh b n không hi u đ c cách phân tích runtime. H n th , ế ư ạ ượ ơ ế
b n c n hi u rõ v gi i thu t liên quan đ n bài toán đ d đoán đ c ế ể ự ượ
nh ng tr ng h p đ c bi t mà ph n m m s ch y ch m ho c sinh ra ườ ẽ ạ
nh ng k t qu không nh mong đ i. ế ả ư
thông tin tài liệu
Bài viết này giới thiệu một số ý tưởng cơ bản nhất về phân tích giải thuật và áp dụng chúng vào những ví dụ minh họa để làm rõ hơn tầm quan trọng của giải thuật.
Mở rộng để xem thêm
từ khóa liên quan
xem nhiều trong tuần
yêu cầu tài liệu
Giúp bạn tìm tài liệu chưa có

LÝ THUYẾT TOÁN


×