CH NG I:ƯƠ
THU T TOÁN
1.1. KHÁI NI M THU T TOÁN.
1.1.1. M đ u:
Có nhi u l p bài toán t ng quát xu t hi n trong toán h c r i r c. Ch ng h n,
cho m t dãy các s nguyên, tìm s l n nh t; cho m t t p h p, li t các t p con c a
; cho t p h p các s nguyên, x p chúng theo th t tăng d n; cho m t m ng, tìm ế
đ ng đi ng n nh t gi a hai đ nh c a nó. Khi đ c giao cho m t bài toán nh v y thìườ ượ ư
vi c đ u tiên ph i làm là xây d ng m t hình d ch i toán đó thành ng c nh toán
h c. Các c u trúc r i r c đ c dùng trong các mô hình này t p h p, dãy, hàm, hoán ư
v , quan h , cùng v i các c u trúc khác nh đ th , cây, m ng - nh ng khái ni m s ư
đ c nghiên c u c ch ng sau.ượ ươ
L p đ c m t hình toán h c thích h p ch m t ph n c a quá trình gi i. ượ
Đ hoàn t t quá tnh gi i, còn c n ph i có m t ph ng pp dùng hình đ gi i bài ươ
toán t ng quát. i m t ch t ng, cái đ c đòi h i m t th t c, đó dãy các ưở ượ
b c d n t i đáp s mong mu n. M t dãy các b c nh v y, đ c g i m t thu tướ ướ ư ượ
toán.
Khi thi t k cài đ t m t ph n m m tin h c cho m t v n đ nào đó, ta c nế ế
ph i đ a ra ph ng pháp gi i quy t th c ch t đó thu t toán gi i quy t v n đ ư ươ ế ế
y. Rõ ràng r ng, n u không tìm đ c m t ph ng pháp gi i quy t thì không th l p ế ượ ươ ế
trình đ c. Chính th , thu t toán khái ni m n n t ng c a h u h t các lĩnh v cượ ế ế
c a tin h c.
1.1.2. Đ nh nghĩa: Thu t toán là m t b ng li t kê các ch d n (hay quy t c) c n th c
hi n theo t ng b c xác đ nh nh m gi i m t bài tn đã cho. ướ
Thu t ng “Algorithm” (thu t toán) xu t phát t tên nhà toán h c R p Al-
Khowarizmi. Ban đ u, t algorism đ c dùng đ ch các quy t c th c hi n các phép ượ
tính s h c trên các s th p phân. Sau đó, algorism chuy n thành algorithm vào th k ế
19. V i s quan tâm ny càng tăng đ i v i các máy tính, ki ni m thu t toán đã đ c ượ
cho m t ý nghĩa chung h n, bao hàm c các th t c xác đ nh đ gi i các bài toán, ch ơ
không ph i ch là th t c đ th c hi n các pp tính s h c.
Có nhi u cách trình bày thu t toán: dùng ngôn ng t nhiên, ngôn ng l u đ ư
(s đ kh i), ngôn ng l p trình. Tuy nhiên, m t khi dùng ngôn ng l p trình thì chơ
nh ng l nh đ c phép trong ngôn ng đó m i th dùng đ c đi u này th ng ượ ượ ườ
làm cho s t các thu t toán tr nên r i r m khó hi u. H n n a, nhi u ngôn ơ
ng l p trình đ u đ c ng r ng rãi, nên ch n m t ngôn ng đ c bi t nào đó là đi u ượ
ng i ta không mu n. v y đây các thu t toán ngoài vi c đ c trình bày b ngườ ượ
4
ngôn ng t nhiên ng v i nh ng ký hi u toán h c quen thu c còn dùng m t d ng gi
mã đ t thu t toán. Gi t o ra b c trung gian gi a s mô t m t thu t toán ướ
b ng ngôn ng thông th ng s th c hi n thu t toán đó trong ngôn ng l p trình. ư
Các b c c a thu t toán đ c ch b ng cách dùng các l nh gi ng nh trong cácướ ư ư
ngôn ng l p trình.
Thí d 1: Mô t thu t toán tìm ph n t l n nh t trong m t y h u h n c s
nguyên.
a) Dùng ngôn ng t nhiên đ t các b c c n ph i th c hi n ướ :
1. Đ t giá tr c c đ i t m th i b ng s nguyên đ u tiên trong dãy. (C c đ i t m
th i s là s nguyên l n nh t đã đ c ki m tra m t giai đo n nào đó c a th t c.) ượ
2. So sánh s nguyên ti p sau v i giá tr c c đ i t m th i, n u nó l n h n giá tr ế ế ơ
c c đ i t m th i tđ t c c đ i t m th i b ng s ngun đó.
3. L p l i b c tr c n u còn các s ngun trong y. ướ ướ ế
4. D ng khi không còn s nguyên nào n a trong dãy. C c đ i t m th i đi m
y chính là s nguyên l n nh t c a dãy.
b) Dùng đo n gi :
procedure max (a1, a2, ..., an: integers)
max:= a1
for i:= 2 to n
if max <ai then max:= ai
{max ph n t l n nh t}
Thu t toán này tr c h t gán s h ng đ u tiên a ướ ế 1 c a dãy cho bi n max. Vòng ế
l pforđ c dùng đ ki m tra l n l t c s h ng c a dãy. N u m t s h ng l n ượ ượ ế
h n giá tr hi n th i c a max thì nó đ c gánm giá tr m i c a max.ơ ượ
1.1.3. Các đ c tr ng c a thu t toán: ư
-- Đ u vào (Input): M t thu t toánc g tr đ u vào t m t t p đã đ c ch rõ. ượ
-- Đ u ra (Output): T m i t p các giá tr đ u vào, thu t toán s t o ra các giá tr đ u
ra. Các giá tr đ u ra chính nghi m c a bài toán.
-- nh d ng: Sau m t s h u h n b c thu t toán ph i d ng. ướ
-- Tính xác đ nh: m i b c, các b c thao tác ph i h t s cràng, không gây nên ướ ướ ế
s nh p nh ng. Nói rõ h n, trong cùng m t đi u ki n hai b x lý cùng th c hi n m t ơ
b c c a thu t toán ph i cho nh ng k t qu nh nhau.ướ ế ư
-- Tính hi u qu : Tr c h t thu t toán c n đúng đ n, nghĩa sau khi đ a d li uướ ế ư
o thu t toán ho t đ ng và đ a ra k t qu nh ý mu n. ư ế ư
-- Tính ph d ng: Thu t toán th gi i b t kỳ m t bài toán nào trong l p các bài
toán. C th là thu t toán có th có các đ u vào là các b d li u khác nhau trong m t
mi n xác đ nh.
5
1.2. THU T TOÁN TÌM KI M.
1.2.1. Bài toán tìm ki m:ế Bài toán xác đ nh v trí c a m t ph n t trong m t b ng
li t s p th t th ng g p trong nhi u tr ng h p khác nhau. Ch ng h n ch ng ư ườ ươ
trình ki m tra chính t c a các t , tìm ki m các t này trong m t cu n t đi n, t ế
đi n ch ng qua cũng là m t b ng li t kê s p th t c a các t . Các bài tn thu c lo i
y đ c g i là các bài toán m ki m.ượ ế
Bài toán tìm ki m t ng quát đ c mô t nh sau: xác đ nh v trí c a ph n t xế ượ ư
trong m t b ng li t các ph n t phân bi t a 1, a2, ..., an ho c xác đ nh r ng không
có m t trong b ng li t đó. L i gi i c a bài toán trên v trí c a s h ng c a b ng
li t giá tr b ng x (t c i s nghi m n u x=a ế i 0 n u x không m tế
trong b ng li t kê).
1.2.2. Thu t toán tìm ki m tuy n tính: ế ế Tìm ki m tuy n tính hay tìm ki m tu nế ế ế
t b t đ u b ng vi c so sánh x v i a 1; khi x=a1, nghi m là v trí a 1, t c là 1; khi xa1,
so sánh x v i a2. N u x=aế2, nghi m v trí c a a 2, t c 2. Khi xa2, so sánh x v i a3.
Ti p t c quá trình này b ng cách tu n t so sánh x v i m i s h ng c a b ng li t ế
cho t i khi tìm đ c s h ng b ng x, khi đó nghi m là v trí c a s h ng đó. N u toàn ượ ế
b ng li t đã đ c ki m tra không xác đ nh đ c v trí c a x, thì nghi m 0. ượ ượ
Gi mã đ i v i thu t toánm ki m tuy n tính đ c cho d i đây: ế ế ư ướ
procedure tìm ki m tuy n tính (x: integer, aế ế 1,a2,...,an: integers phân bi t)
i := 1
while (i n and x ai)
i := i + 1
if i n then location := i
else location := 0
{location là ch s d i c a s h ng b ng x ho c là 0 n u kngm đ c x} ướ ế ượ
1.2.3. Thu t toán tìm ki m nh phân: ế Thu t toán này có th đ c dùng khi b ng ượ
li t kê có các s h ng đ c s p theo th t tăng d n. Ch ng h n, n u các s h ng ượ ế
các s thì chúng đ c s p t s nh nh t đ n s l n nh t ho c n u chúng các t ượ ế ế
hay xâu t thì chúng đ c s p theo th t t đi n. Thu t toán th hai này g i ượ
thu t toán tìm ki m nh phân. đ c ti n hành b ng cách so sánh ph n t c n xác ế ượ ế
đ nh v trí v i s h ng gi a b ng li t. Sau đó b ng này đ c tách làm hai b ng kê ư
con nh h n có kích th c nh nhau, ho c m t trong hai b ng con ít h n b ng con kia ơ ướ ư ơ
m t s h ng. S tìm ki m ti p t c b ng cách h n ch tìm ki m m t b ng con ế ế ế ế
thích h p d a trên vi c so sánh ph n t c n xác đ nh v trí v i s h ng gi a b ng kê.
Ta s th y r ng thu t toán tìm ki m nh phân hi u qu h n nhi u so v i thu t toán ế ơ
tìm ki m tuy n tính.ế ế
6
Thí d 2. Đ tìm s 19 trong b ng li t 1,2,3,5,6,7,8,10,12,13,15,16,18,19,20,22 ta
ch b ng li t g m 16 s h ng này thành hai b ng li t nh h n, m i b ng 8 ơ
s h ng, c th là: 1,2,3,5,6,7,8,10 và 12,13,15,16,18,19,20,22. Sau đó ta so sánh 19 v i
s h ng cu i cùng c a b ng con th nh t. 10<19, vi c tìm ki m 19 ch gi i h n ế
trong b ng li tcon th 2 t s h ng th 9 đ n 16 trong b ng li t kê ban đ u. Ti p ế ế
theo, ta l i tách b ng li t con g m 8 s h ng này làm hai b ng con, m i b ng 4
s h ng, c th 12,13,15,16 18,19,20,22. 16<19, vi c tìm ki m l i đ c gi i ế ượ
h n ch trong b ng con th 2, t s h ng th 13 đ n 16 c a b ng li t ban đ u. ế
B ng li t kê th 2 này l i đ c táchm hai, c th là: 18,19 20,22. Vì 19 không l n ượ
h n s h ng l n nh t c a b ng con th nh t nên vi c tìm ki m gi i h n ch b ngơ ế
con th nh t g m các s 18,19, s h ng th 13 14 c a b ng ban đ u. Ti p theo ế
b ng con ch a hai s h ng này l i đ c tách làm hai, m i b ng có m t s h ng 18 và ượ
19. Vì 18<19, s tìm ki m gi i h n ch trong b ng con th 2, b ng li t kê ch ch a s ế
h ng th 14 c a b ng li t kê ban đ u, s h ng đó là s 19. Bây gi s tìm ki m đã thu ế
h p v ch còn m t s h ng, so sánh ti p cho th y19 s h ng th 14 c a b ng li t ế
ban đ u.
Bây gi ta có th ch các b c trong thu t toán tìm ki m nh phân. ướ ế
Đ tìm s ngun x trong b ng li t a 1,a2,...,an v i a1 < a2 < ... < an, ta b t đ u
b ng vi c so sánh x v i s h ng a m gi a c a dãy, v i m=[(n+1)/2]. N u x > a ế m, vi c
tìm ki m x gi i h n n a th hai c a dãy, g m aế m+1,am+2,...,an. N u x không l n h nế ơ
am, thì s m ki m gi i h n trong n a đ u c a dãy g m a ế 1,a2,...,am.
Bây gi s tìm ki m ch gi i h n trong b ng li t kê có kng h n [n/2] ph n t . ế ơ
Dùng chính th t c y, so sánh x v i s h ng gi a c a b ng li t kê đ c h n ch . ượ ế
Sau đó l i h n ch vi c tìm ki m n a th nh t ho c n a th hai c a b ng li t . ế ế
L p l i quá trình này cho t i khi nh n đ c m t b ng li tch có m t s h ng. Sau ượ
đó, ch còn xác đ nh s h ng này ph i x hay không. Gi cho thu t toán tìm
ki m nh phân đ c cho d i đây:ế ượ ư
procedure tìm ki m nh phân (x: integer, aế 1,a2,...,an: integers tăng d n)
i := 1 {i là đi m mút ti c a kho ng tìm ki m} ế
j := n {j là đi m mút ph i c a kho ng tìm ki m} ế
while i < j
begin
m:= [(i+j)/2]
if x>am then i:=m+1
else j := m
end
if x = ai then location := i
7
else location := 0
{location là ch s d i c a s h ng b ng x ho c 0 n u không tìm th y x} ướ ế
1.3. Đ PH C T P C A THU T TOÁN.
1.3.1. Khái ni m v đ ph c t p c a m t thu t toán :
Th c đo hi u qu c a m t thu t toán là th i gian mà máy tính s d ng đ gi iướ
i toán theo thu t toán đang xét, khi các giá tr đ u vào m t kích th c xác đ nh. ướ
M t th c đo th hai là dung l ng b nh đòi h i đ th c hi n thu t toán khi các giá ướ ượ
tr đ u vào có kích th c xác đ nh. Các v n đ nh th liên quan đ n đ ph c t p tính ướ ư ế ế
toán c a m t thu t toán. S phân tích th i gian c n thi t đ gi i m t bài toán kích ế
th c đ c bi t nào đó liên quan đ n đ ph c t p th i gian c a thu t toán. S phân tíchướ ế
b nh c n thi t c a y tính liên quan đ n đ ph c t p không gian ế ế c a thu t toán.
V c xem xét đ ph c t p th i gian và kng gian c a m t thu t toán là m t v n đ r t
thi t y u khi các thu t toán đ c th c hi n. Bi t m t thu t toán s đ a ra đáp sế ế ượ ế ư
trong m t micro giây, trong m t phút ho c trong m t t năm, hi n nhiên là h t s c quan ế
tr ng. T ng t nh v y, dung l ng b nh đòi h i ph i kh d ng đ gi i m t ươ ư ượ
i toán,vì v y đ ph c t p không gian cũng c n ph i tính đ n.Vì vi c xem xét đ ế
ph c t p không gian g n li n v i các c u trúc d li u đ c bi t đ c ng đ th c ượ
hi n thu t toán nên đây ta s t p trung xemt đ ph c t p th i gian.
Đ ph c t p th i gian c a m t thu t toán th đ c bi u di n qua s các ượ
phép toán đ c dùng b i thu t toán đó khi các giá tr đ u vào m t kích th c xácượ ướ
đ nh. S đ ph c t p th i gian đ c t thông qua s các phép toán đòi h i thay ượ
vì th i gian th c c a máy tính là b icác máy tính khác nhau th c hi n các phép tính
s c p trong nh ng kho ng th i gian khác nhau. H n n a, phân tích t t c các phépơ ơ
toán tnh các pp tính bit s c p mà máy nh s d ng là đi u r t ph c t p.ơ
Thí d 3: t thu t toán tìm s l n nh t trong y n s a 1, a2, ..., an. th coi kích
th c c a d li u nh p s l ng ph n t c a dãy s , t c n. N u coi m i l n soướ ượ ế
sánh hai s c a thu t toán đòi h i m t đ n v th i gian (giây ch ng h n) thì th i gian ơ
th c hi n thu t toán trong tr ng h p x u nh t n-1 giây. V i dãy 64 s , th i gian ườ
th c hi n thu t toán nhi u l m là 63 giây.
Thí d 4:Thu t toán v trò ch i “Tháp Hà N i” ơ
Trò ch i “Tháp Hà N i” nh sau: Có ba c c A, B, C 64 cái đĩa (có l đ đ tơ ư
o c c), các đĩa có đ ng kính đôi m t khác nhau. Nguyên t c đ t đĩa vào c c là: m i ư
đĩa ch đ c ch ng lên đĩa l n h n nó. Ban đ u, c 64 đĩa đ c đ t ch ng lên nhau ượ ơ ượ
c t A; hai c t B, C tr ng. V n đ ph i chuy n c 64 đĩa đó sang c t B hay C, m i
l n ch đ c di chuy n m t đĩa. ượ
Xét trò ch i v i n đĩa ban đ u c c A (c c B C tr ng). G i Sơ n s l n
chuy n đĩa đ ch i xong trò ch i v i n đĩa. ơ ơ
8