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 xây d ng m thì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 là 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 , y, m ng - nh ng khái ni m s ư
đ c nghiên c u cá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á trình gi i, còn c n ph i có m t ph ng pháp dùng mô hình đ gi i bài ươ
toán t ng quát. i m t cách t ng, i đ c đòi h i m t th t c, đó y các ưở ượ
b c d n t i đáp s mong mu n. M t y các b c nh v y, đ c g i m t thu tướ ướ ư ượ
toán.
Khi thi t k 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 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 toán đã 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 ng đ ch 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 ngày càng tăng đ i v i các máy tính, khái ni m thu t toán đã đ c ượ
cho m t ý nghĩa chung h n, bao hàm c các th t c c đ nh đ gi i các bài toán, ch ơ
không ph i ch th t c đ th c hi n các phép tính s h c.
Có nhi u ch trình y thu t toán: 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 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 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 y b ngườ ượ
4
ngôn ng t nhiên cù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 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 b c c a thu t toán đ c ch b ng cách dùng c l nh gi ng nh trong cácướ ượ ư
ngôn ng l p trình.
Thí d 1: t thu t toán m ph n t l n nh t trong m t dãy h u h n các s
nguyên.
a) 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. Sonh 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 thì đ t c c đ i t m th i b ng s nguyên đó.
3. L p l i b c tr c n u còn các s nguyên trong y. ướ ướ ế
4. D ng khi không còn s nguyên o n a trong 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) ng đo n gi :
procedure max (a1, a2, ..., an: integers)
max:= a1
for i:= 2 to n
if max <ai then max:= ai
{max là 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 y cho bi n max. ng ế
l p “for” đ c dùng đ ki m tra l n l t cá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án làm 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án có các giá tr đ u vào t m t t p đã đ c ch rõ. ượ
-- Đ u ra (Output): T m i t p 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 là nghi m c a bài toán.
-- Tí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 c rõ rà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 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:ế i toán 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 toán thu c lo i
y đ c g i làc bài toán tìm ki m.ượ ế
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 ph n t phân bi t a 1, a2, ..., an ho c xác đ nh r ng nó không
có m t trong b ng li t kê đó. 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 nh hay m ki m tu nế ế ế
t là 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 là 2. Khi xa2, so sánh x v i a3.
Ti p t c quá trình y b ng ch tu n t so 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 đ i v i thu t toán tìm ki m tuy n tính đ c cho d i đây: ế ế ượ ướ
procedure 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 không tìm đ c x} ướ ế ượ
1.2.3. Thu t toán tìm ki m nh phân: ế Thu t toán này 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 là ượ ế
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 u t thì chúng đ c s p theo th t t đi n. Thu t toán th hai y g i ượ
thu t toán tìm ki m nh phân. đ c ti n nh b ng cách so sánh ph n t c n c ế ượ ế
đ nh v trí v i s h ng gi a b ng li t kê. Sau đó b ng này đ c tách làm hai b ng ượ
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 c đ nh v trí v i s h ng gi a b ng kê.
Ta s th y r ng thu t toán m ki m nh phân hi u qu h n nhi u so v i thu t toán ế ơ
m ki m tuy n tính.ế ế
6
Thí d 2. Đ 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. Vì 10<19, vi c m ki m 19 ch gi i h n ế
trong b ng li t kê con 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ách làm hai, c th là: 18,19 và 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 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 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.
y gi ta có th ch rõ các b c trong thu t toán tìm ki m nh phân. ướ ế
Đ tìm s nguyên x trong b ng li ta 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
m ki m x gi i h n n a th hai c a y, g m aế m+1,am+2,...,an. N u x không l n h nế ơ
am, thì s tìm ki m gi i h n trong n a đ u c a dãy g m a ế 1,a2,...,am.
y gi s m ki m ch gi i h n trong b ng li t kê có không h n [n/2] ph n t . ế ơ
ng chính th t c nà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 m ki m n a th nh t ho c n a th hai c a b ng li t kê. ế ế
L p l i quá trình y cho t i khi nh n đ c m t b ng li t kê ch 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:ế ượ ướ
procedurem ki m nh phân (x: integer, aế 1,a2,...,an: integers tăng d n)
i := 1 {i là đi m mút trái c a kho ngm 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ôngm 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à 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 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 g ướ ư
tr đ u vào có kích th cc đ 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à không gian c a m t thu t toán là m t v n đ r t
thi t y u khi 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 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 dùng đ th c ượ
hi n thu t toán nên đây ta s t p trung xem xét đ 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 ng b i thu t toán đó khi các giá tr đ u o m t ch th c xácượ ướ
đ nh. S đ ph c t p th i gian đ ct 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 thànhc phép tính bit s c p mà máy tính s d ng là đi u r t ph c t p.ơ
Thí d 3: Xét thu t toán tìm s l n nh t trong dã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 “Tp Hà N i” ơ
Trò ch i “Tháp Hà N i” nh sau: Có ba c c A, B, C và 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